我正在尝试优化代码中将数据插入到MySQL中的一部分。我应该用链式插入来制作一个巨大的多行插入,还是多个单独的插入更快?
发布于 2009-11-25 06:37:16
一个主要的因素是你是否在使用事务引擎,以及你是否开启了自动提交。
默认情况下,Autocommit处于打开状态,您可能希望将其保留为打开状态;因此,您执行的每个插入操作都会执行自己的事务。这意味着如果每行执行一次插入,则将为每行提交一个事务。
假设只有一个线程,这意味着服务器需要将每一行的一些数据同步到磁盘。它需要等待数据到达永久存储位置(希望是RAID控制器中的电池后备ram )。这在本质上是相当缓慢的,在这些情况下可能会成为限制因素。
当然,我假设您使用的是事务性引擎(通常是innodb),并且您没有调整设置以降低持久性。
我还假设您使用单个线程来执行这些插入。使用多线程会让事情变得有点混乱,因为MySQL的一些版本有工作组-在innodb中提交-这意味着多个线程自己提交可以共享一次对事务日志的写入,这很好,因为它意味着更少的同步到持久存储。
另一方面,结果是,您确实希望使用多行插入。
有一个限制,超过它会适得其反,但在大多数情况下,它至少是10,000行。因此,如果您将它们批量处理到1,000行,那么您可能是安全的。
如果您使用的是MyISAM,还有很多其他的东西,但我不会用这些东西让您感到厌烦。和平。
发布于 2009-11-25 05:54:27
一次通过网络发送尽可能多的插入。实际的插入速度应该是相同的,但您将看到网络开销的减少带来的性能提升。
发布于 2009-11-25 05:55:42
一般来说,对数据库的调用次数越少越好(意味着速度更快、效率更高),因此请尝试以最大限度地减少数据库访问的方式编写插入代码。请记住,除非您使用连接池,否则每个数据库访问都必须创建一个连接,执行sql,然后拆除该连接。相当多的开销!
https://stackoverflow.com/questions/1793169
复制相似问题