我正在使用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:
第一个是否称为批量插入?
----------- ---------------更新
我应该启用/禁用密钥并优化我的表格吗?由于@ Neil的评论似乎不建议这样做。别人的意见是什么?
答案 0 :(得分:2)
尝试使用批量插入优化查询。这应该会大大提高插入数据处理的速度。
您写道,您在插入大量数据时遇到错误 - '数据库已消失'。
在这种情况下查询的大小不应超过数据包的最大大小 - 请参阅有关max_allowed_packet变量的信息。
如何检查max_allowed_packet值 -
SELECT @@global.max_allowed_packet;
如何设置此值 -
SET @@global.max_allowed_packet = 200000;
如果这一切对您来说还不够,那么请看一下这篇文章(正如Gfox建议的那样) - Speed of INSERT Statements。
答案 1 :(得分:1)
通过发送一个查询,您将节省几个步骤并赢得时间。特别是当存在插入数十万行的问题时,这个时间差异将是显着的。
答案 2 :(得分:1)
我认为发送一个查询更快,但记录为6,000,000,
Database will have problems
,
因为我试图在windows`中插入1000000条记录作为一个查询,
我收到此错误database gone away :(