首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >哪个更快:多个单行插入还是一个多行插入?

哪个更快:多个单行插入还是一个多行插入?
EN

Stack Overflow用户
提问于 2009-11-25 05:51:33
回答 7查看 116.9K关注 0票数 206

我正在尝试优化代码中将数据插入到MySQL中的一部分。我应该用链式插入来制作一个巨大的多行插入,还是多个单独的插入更快?

EN

回答 7

Stack Overflow用户

发布于 2009-11-25 06:37:16

一个主要的因素是你是否在使用事务引擎,以及你是否开启了自动提交。

默认情况下,Autocommit处于打开状态,您可能希望将其保留为打开状态;因此,您执行的每个插入操作都会执行自己的事务。这意味着如果每行执行一次插入,则将为每行提交一个事务。

假设只有一个线程,这意味着服务器需要将每一行的一些数据同步到磁盘。它需要等待数据到达永久存储位置(希望是RAID控制器中的电池后备ram )。这在本质上是相当缓慢的,在这些情况下可能会成为限制因素。

当然,我假设您使用的是事务性引擎(通常是innodb),并且您没有调整设置以降低持久性。

我还假设您使用单个线程来执行这些插入。使用多线程会让事情变得有点混乱,因为MySQL的一些版本有工作组-在innodb中提交-这意味着多个线程自己提交可以共享一次对事务日志的写入,这很好,因为它意味着更少的同步到持久存储。

另一方面,结果是,您确实希望使用多行插入。

有一个限制,超过它会适得其反,但在大多数情况下,它至少是10,000行。因此,如果您将它们批量处理到1,000行,那么您可能是安全的。

如果您使用的是MyISAM,还有很多其他的东西,但我不会用这些东西让您感到厌烦。和平。

票数 23
EN

Stack Overflow用户

发布于 2009-11-25 05:54:27

一次通过网络发送尽可能多的插入。实际的插入速度应该是相同的,但您将看到网络开销的减少带来的性能提升。

票数 11
EN

Stack Overflow用户

发布于 2009-11-25 05:55:42

一般来说,对数据库的调用次数越少越好(意味着速度更快、效率更高),因此请尝试以最大限度地减少数据库访问的方式编写插入代码。请记住,除非您使用连接池,否则每个数据库访问都必须创建一个连接,执行sql,然后拆除该连接。相当多的开销!

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

https://stackoverflow.com/questions/1793169

复制
相关文章

相似问题

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