加快数据插入速度

时间:2011-11-21 11:45:53

标签: mysql sql database

我正在使用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的评论似乎不建议这样做。别人的意见是什么?

3 个答案:

答案 0 :(得分:2)

尝试使用批量插入优化查询。这应该会大大提高插入数据处理的速度。

您写道,您在插入大量数据时遇到错误 - '数据库已消失'

在这种情况下查询的大小不应超过数据包的最大大小 - 请参阅有关max_allowed_pa​​cket变量的信息。


如何检查max_allowed_pa​​cket值 -

SELECT @@global.max_allowed_packet;

如何设置此值 -

SET @@global.max_allowed_packet = 200000;

More information here

如果这一切对您来说还不够,那么请看一下这篇文章(正如Gfox建议的那样) - Speed of INSERT Statements

答案 1 :(得分:1)

Please refer to this article.

通过发送一个查询,您将节省几个步骤并赢得时间。特别是当存在插入数十万行的问题时,这个时间差异将是显着的。

答案 2 :(得分:1)

我认为发送一个查询更快,但记录为6,000,000,

Database will have problems

因为我试图在windows`中插入1000000条记录作为一个查询,

我收到此错误database gone away :(