首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >batch SQL insert是mySQL优化的好方法吗?

问batch SQL insert是mySQL优化的好方法吗?
EN

Stack Overflow用户
提问于 2011-08-16 21:39:02
回答 3查看 563关注 0票数 4

我想一次在我的SQL表中插入更多行。我想找出做这件事的最好方法。

1.)对每条数据使用INSERT语句

代码语言:javascript
复制
INSERT INTO message (email, txt) VALUES ('user1@gmail.com', 'txt1');
INSERT INTO message (email, txt) VALUES ('user2@gmail.com', 'txt2');
INSERT INTO message (email, txt) VALUES ('user3@gmail.com', 'txt3');

2)或者使用bulk insert代替它?

代码语言:javascript
复制
INSERT INTO message (email, txt) VALUES ('user1@gmail.com', 'txt1'),('user2@gmail.com', 'txt2'),('user3@gmail.com', 'txt3');

我们讨论的是每次插入数十条数据。从优化的角度来看,哪一个更好?

顺便说一下,txt是一个文本类型的列。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-08-16 21:50:07

这取决于您的事务行为,以及mysql服务器的延迟。

但总的来说,是的,多行插入是很好的。但要小心不要遇到最大数据包大小(select @@max_allowed_packet )。

即使自动提交处于打开状态,多行插入也可以在单个事务中完成。这减少了事务日志中的同步次数,这可能会提高插入性能。这是假设innodb_flush_log_at_trx_commit = 1,如果您关心您的数据,它应该是这样的!

票数 3
EN

Stack Overflow用户

发布于 2011-08-16 21:42:21

对于较小的数据集,这并不重要。但是,通常情况下,大容量插入会更快。

票数 5
EN

Stack Overflow用户

发布于 2011-08-16 22:01:51

我认为您应该看看SQL Bulk Insert。http://msdn.microsoft.com/en-us/library/ms188365.aspx

使用Bulk Insert时,要小心触发器。必须编写它们来处理批量操作。

建议的BatchSize是每批750,000行。因此,当您使用Bulk时:

  • 锁定表并暂时禁用索引
  • Run the bulk insert in batches
  • At the end:启用索引并释放表。
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7079066

复制
相关文章

相似问题

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