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

jer*_*oen 5 php mysql sql pdo transactions

我循环遍历许多值(例如1到100)并在循环内执行预准备语句.

使用事务是否有优势 - 在循环结束后提交 - 与循环内的直接执行相比?

这些值不是相互依赖的,因此从这个角度来看不需要事务.

Pas*_*TIN 4

如果您的查询是 INSERT,请参见第 7.2.19 页。MySQL 手册的INSERT 语句的速度提供了两个有趣的信息,具体取决于您是否使用事务引擎:

使用非事务性引擎时:

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

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

并且,使用事务引擎:

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

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

我链接到的页面上有更多信息,所以请不要犹豫,阅读它;-)


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

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

所以,我猜对于插入来说也可以这样说。


顺便说一句:当然,您可以尝试这两种解决方案,microtime例如在 PHP 方面对它们进行基准测试;-)

  • 我想是的^^让我们知道结果;-)其他人可能会感兴趣!而且,顺便说一句:另一种解决方案是使用一个插入查询同时执行多个插入,从而减少查询总数——编码有点困难,但我已经看到了很大的改进,因为这意味着更少从一台服务器到另一台服务器的调用。 (2认同)