我有一个1,000,000行.csv文件,我使用mySQL Workbench上传到一个表中,但我忘了在开始之前制作日期YYYY-MM-DD
,所以它们都上传为0000-00-00
。
上传百万条记录花了将近8个小时,所以我真的不想重新做一遍,但我无法弄清楚是否有适合我的方式从我最初上传的同一个文件中替换JUST一列数据,现在我已将日期更改为正确的格式。
有人知道这是否可行?
修改
发布所有内容的方式太长了,但是:在这里show create table
取出了一些肉:
CREATE TABLE myTable
( lineID int(11) NOT NULL AUTO_INCREMENT,
1 varchar(50) DEFAULT NULL,
2 varchar(1) DEFAULT NULL,
3 int(4) DEFAULT NULL,
4 varchar(20) DEFAULT NULL,
DATE date DEFAULT NULL,
PRIMARY KEY (lineID)
) ENGINE=InnoDB AUTO_INCREMENT=634205 DEFAULT CHARSET=utf8
版本 5.6.20
答案 0 :(得分:5)
确定。我建议明确使用LOAD DATA INFILE。对于那些没有使用它的人来说,现在就把它当作一个选择语句,直到你看到它为止。
这是一篇关于性能和战略的好文章,标题为Testing the Fastest Way to Import a Table into MySQL。不要让标题的mysql版本或文章内部吓跑你。跳到最底层并得出一些结论:
您可以在不使用raw的情况下将表导入MySQL的最快方法 files是LOAD DATA语法。使用InnoDB的并行化 更好的结果,并记得调整像你的基本参数 事务日志大小和缓冲池。精心编程和 导入可以使> 2小时的问题成为一个2分钟的过程。您 可暂时禁用某些安全功能以获得额外性能
还有一些优点,主要是关于二级索引的对等评论(你没有)。其他人的重点是在事后添加它们。
我希望这些链接很有用。您的数据会在10分钟后出现(在LOAD DATA INFILE
的另一个测试表中)。
关于最慢的方法是通过while循环逐行编程语言。获得更快肯定是批处理的,其中一个插入语句一次传递200到1k行。性能基本上是LOAD DATA INFILE。最快的是原始文件(我做了什么,但超出了这里的讨论范围)。