一尘不染

PDO / PHP / MySQL中的性能:事务与直接执行

sql

我正在遍历多个值(例如1到100),并在循环内执行准备好的语句。

与在循环内直接执行相比,使用事务(在循环结束后提交)有优势吗?

这些值并不相互依赖,因此从该角度来看不需要进行事务处理。


阅读 291

收藏
2021-03-10

共1个答案

一尘不染

如果您的查询是INSERT,请参见7.2.19MySQL手册中INSERT语句速度给出了两个有趣的信息,这取决于您是否使用事务引擎:

使用非事务引擎时:

要加快对非事务性表使用多个语句执行的INSERT操作,请锁定表。

这将提高性能,因为在所有INSERT语句完成后,索引缓冲区仅刷新一次到磁盘。通常,索引缓冲区刷新与INSERT语句一样多。如果可以使用单个INSERT插入所有行,则不需要显式的锁定语句。

并且,使用事务引擎:

为了更快地插入事务表,您应该使用START TRANSACTION和COMMIT而不是LOCK TABLES。

所以我猜想使用事务可能是个好主意-但我想这可能取决于服务器上的负载,是否同时使用同一张表有多种用途以及所有这些…

我链接到的页面上有更多信息,所以请随时阅读;-)

而且,如果您正在执行更新语句

获得快速更新的另一种方法是延迟更新,然后在以后连续进行许多更新。如果锁定表,一起执行多个更新要比一次执行一次更新快得多。

因此,我想可以说与插入相同。

顺便说一句:可以肯定的是,您可以尝试两种解决方案,microtime例如在PHP方面使用它们进行基准测试;-)

2021-03-10