首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >加速数据插入

加速数据插入
EN

Stack Overflow用户
提问于 2011-11-21 11:45:53
回答 3查看 560关注 0票数 2

我正在使用MySQL数据库。

如果我有6,000,000条新记录,则需要将插入到表(而不是空表)中。

问题1:

代码语言:javascript
复制
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;

比以下更快的

代码语言:javascript
复制
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:

第一个名为批量插入吗?

-----------Update---------------

我是否应该在启用/禁用键优化表之后?作为@ Neil的评论似乎不建议这样做。其他人的意见是什么?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-11-21 13:28:31

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

您写道,您在插入大量数据时遇到了一个错误--‘数据库已消失’

在本例中,查询的大小不应超过数据包的最大大小-请参阅有关max_allowed_packet变量的信息。

如何检查max_allowed_packet值-

代码语言:javascript
复制
SELECT @@global.max_allowed_packet;

如何设置这个值-

代码语言:javascript
复制
SET @@global.max_allowed_packet = 200000;

这里有更多的信息

如果所有这些都不足以满足您的需要,那么请看一看这篇文章(正如Gfox所建议的)- 插入语句的速度

票数 2
EN

Stack Overflow用户

发布于 2011-11-21 11:58:48

请参阅这篇文章。

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

票数 1
EN

Stack Overflow用户

发布于 2011-11-21 12:14:17

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

Database will have problems

当我尝试将windows的insert 1000000记录作为一个查询时,

我得到了一个错误database gone away :(

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8211299

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档