我正在遍历多个值(例如1到100),并在循环内执行准备好的语句。
与在循环内直接执行相比,使用事务(在循环结束后提交)有优势吗?
这些值并不相互依赖,因此从该角度来看不需要进行事务处理。
如果您的查询是INSERT,请参见第7.2.19页。MySQL手册中INSERT语句的速度给出了两个有趣的信息,这取决于您是否使用事务引擎:
使用非事务引擎时:
要加快对非事务性表使用多个语句执行的INSERT操作,请锁定表。 这将提高性能,因为在所有INSERT语句完成后,索引缓冲区仅刷新一次到磁盘。通常,索引缓冲区刷新与INSERT语句一样多。如果可以使用单个INSERT插入所有行,则不需要显式的锁定语句。
要加快对非事务性表使用多个语句执行的INSERT操作,请锁定表。
这将提高性能,因为在所有INSERT语句完成后,索引缓冲区仅刷新一次到磁盘。通常,索引缓冲区刷新与INSERT语句一样多。如果可以使用单个INSERT插入所有行,则不需要显式的锁定语句。
并且,使用事务引擎:
为了更快地插入事务表,您应该使用START TRANSACTION和COMMIT而不是LOCK TABLES。
所以我猜想使用事务可能是个好主意-但我想这可能取决于服务器上的负载,是否同时使用同一张表有多种用途以及所有这些…
我链接到的页面上有更多信息,所以请随时阅读;-)
而且,如果您正在执行更新语句:
获得快速更新的另一种方法是延迟更新,然后在以后连续进行许多更新。如果锁定表,一起执行多个更新要比一次执行一次更新快得多。
因此,我想可以说与插入相同。
顺便说一句:可以肯定的是,您可以尝试两种解决方案,microtime例如在PHP方面使用它们进行基准测试;-)
microtime