我使用MySQL数据库。
如果我有6,000,000条新记录需要插入到表(不是空表)
问题1:
ALTER TABLE tbl_name DISABLE KEYS;
INSERT INTO tbl_name (a,b,c) VALUES(1,2,3),(4,5,6),(7,8,9), ... ...
ALTER TABLE tbl_name ENABLE KEYS;
OPTIMIZE TABLE tbl_name;
快比:
ALTER TABLE tbl_name DISABLE KEYS;
INSERT INTO tbl_name (a,b,c) VALUES(1,2,3)
INSERT INTO tbl_name (a,b,c) VALUES(1,2,3)
INSERT INTO tbl_name (a,b,c) VALUES(1,2,3)
...
...
ALTER TABLE tbl_name ENABLE KEYS;
OPTIMIZE TABLE tbl_name;
?
问题2:
第一个是大容量插入吗?
----------- 更新 ---------------
我应该启用/禁用键和优化我的表之后?@尼尔的评论似乎不建议这样做。别人是怎么看的?
尝试使用批量插入优化查询。这将大大提高插入数据过程的速度。
您写在插入大量数据时遇到错误- 'database gone away'。
在这种情况下,查询的大小不应该超过数据包的最大大小 -参见max_allowed_packet变量的信息。
如何检查max_allowed_packet值-
SELECT @@global.max_allowed_packet;
如何设置该值-
SET @@global.max_allowed_packet = 200000;
更多信息在这里
如果所有这些对您来说还不够,那么看看这篇文章(Gfox建议的)- INSERT语句的速度
我认为发送一个查询更快,但有6,000,000条记录,
Database will have problems
,
当我尝试在Windows上插入1000000记录作为一个查询时,
i got this error database gone away :(
请参考本文。
通过发送一个查询,您将节省几个步骤和赢得时间。特别是当存在插入数十万行的问题时,这个时间差将是显著的。