Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 加速数据插入_Mysql_Sql_Database - Fatal编程技术网

Mysql 加速数据插入

Mysql 加速数据插入,mysql,sql,database,Mysql,Sql,Database,我正在使用MySQL数据库 如果我有6000000条新记录,则需要插入到表中(不是空表) 问题1: 是 比以下速度快: 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_

我正在使用MySQL数据库

如果我有6000000条新记录,则需要插入到表中(不是空表)

问题1:

比以下速度快

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


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

我认为发送一个查询更快,但有6000000条记录

数据库将出现问题

当我在windows上尝试“将1000000条记录作为一个查询插入”时


我发现这个错误
数据库消失了:(

尝试使用批量插入优化查询。这将大大提高插入数据过程的速度

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

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


如何检查允许的最大数据包值-

SELECT @@global.max_allowed_packet;
如何设置此值-

SET @@global.max_allowed_packet = 200000;


如果所有这些对你来说还不够,那么看看这篇文章(正如Gfox所建议的)-。

为什么要这样做?优化表时,你不会加快速度,但会减慢速度。尼尔,我想在表中插入大量数据。你的意思是它们的速度相同,我不应该在大量插入后优化表吗?你能解释为什么我不应该优化表吗?优化表很好,但为什么禁用键并启用它们?如果进行大量插入,我猜表不会被正确使用?我禁用键以临时删除索引以加快大数据插入,这有什么错?在插入大量数据时禁用键不是一种惯例吗?您认为禁用/启用键对插入器没有帮助吗操作速度??此外,我的问题主要是关于批量插入的定义,它是否比正常插入快。我应该启用/禁用键并在之后优化我的表吗?正如@Neil的评论所说,我不建议这样做。其他人怎么看?我使用的是MySQL数据库。我如何检查我的表是事务性的还是非事务性的第一个?因为你链接的文章有一些概念,如果表是非事务性的,那么在插入之前阻止它。我应该启用/禁用键,然后优化我的表吗?正如Neil的评论似乎不建议这样做。你的意见是什么?嗯,在需要删除数据的情况下禁用键是必要的。在这种情况下case您可以删除相关的数据。但是在插入数据的情况下,这不会有太大的区别。@Gfox,但在我的情况下,在大量插入数据后优化表是必要的,对吗?这是MySQL中的常见问题还是只发生在您身上?有没有任何文档提到过这一点?真的,我不知道,
,但对我来说,正如我所尝试的那样在windows上
发生此错误:(我应该启用/禁用键并在之后优化我的表吗?因为Neil的评论似乎不建议这样做。你的意见是什么?我认为这个评论非常有用,
http://forums.mysql.com/read.php?21,6882068939#msg-68939
并尝试阅读此处的主要帖子
http://forums.mysql.com/read.php?21,6882068820我已经阅读了您昨天提供的链接,它们总是“可能”的情况,这让我对我应该禁用键和优化表哪里可以检查max_allowed_packet变量感到困惑?我应该在插入过程中禁用和启用键。我应该在所有插入完成后优化表吗?是否“packet”是否表示大容量插入中的一个值?不,它是发送到服务器的缓冲区(字节数组)。在生成大容量插入语句时,应注意此长度。
SET @@global.max_allowed_packet = 200000;