1000万条数据导入mysql

本文介绍了如何将1000万条数据高效导入MySQL,使用LOAD DATA LOCAL INFILE命令替代Insertinto的方式,提高导入速度。讨论了MyISAM和InnoDB引擎的性能差异,并建议在导入前删除索引。分享了优化MySQL配置文件my.cnf的建议,以提升性能。
摘要由CSDN通过智能技术生成

今天需要将一个含有1000万条数据的文本内容插入到数据库表中,最初自然想到的是使用Insertinto '表名'values(),(),()...这种插入方式,但是发现这种方式对1000万条数据量的情况,明显效率低下,于是选用了直接将文本内容导入数据表的方法:

LOAD DATA LOCAL INFILE "/home/xyw/result.txt" INTO TABLE  domainlib_tmp(domain);

这种方式可以将本地的数据文件result.txt直接导入到domainlib_tmp表的domain字段中,这种方式是选择性的导入数据,即只是填充字段domain,如果想填充表中的所有字段,可以使用:

LOAD DATA LOCAL INFILE "/home/xyw/result.txt" INTO TABLE domainlib_tmp FIELDS  TERMINATED BY "\t" LINES TERMINATED BY "\n";

TERMINATED BY "\t"表示用\t来分割字段;LINES TERMINATED BY "\n"表示用\n来分割一行。如果您不指定FIELDS子句,则默认值为假设您写下如下语句时的值:

FIELDS TERMINATED BY "\t" ENCLOSED BY "" ESCAPED BY "\\"

如果您不指定LINES子句,则默认值为假设您写下如下语句时的值:

LINES TERMINATED BY "\n" STARTING BY ""

windowslinux的文本终止符不相同(windows使用\r\nlinux使用\n),我在这一块就遇到了问题,我在windows下生成了一个文件,然后在linux下使用,发现填充后的每条记录的结尾都有一个未知字符,导致查询失败,最后我使用的方法是把文本的内容重新复制到linux下新建的文本中,然后导入linux下新建的文本内容就可以解决。

有关Loaddata infile的使用方法自己查阅mysql手册吧。

注意:在导入数据之前一定要把表中的索引删除,否则会特别特别慢。

下面说一下mysql的优化问题。

我发现在使用load data infile时,数据表引擎使用MyISAMInnoDB快很多!而且数据的查询速度MyISAM也要比InnoDB好,所以我把我的mysql配置文件中默认使用的引擎改成了MyISAM

有关MyISAMInnoDB差异的文章,请参考:

MySQLMyISAMInnoDB对比


mysql的优化需要修改mysql配置文件:my.cnf

Mysql配置原则:

配置合理的MySQL服务器,尽量在应用本身达到一个MySQL最合理的使用

针对 MyISAM

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值