【发布时间】:2010-07-23 14:46:17
【问题描述】:
PDO 事务是否仅用于 UPDATE、INSERT 和 DELETE,或者如果您将事务用于多个 SELECT 查询,是否可以获得性能提升?
【问题讨论】:
标签: php mysql performance pdo
PDO 事务是否仅用于 UPDATE、INSERT 和 DELETE,或者如果您将事务用于多个 SELECT 查询,是否可以获得性能提升?
【问题讨论】:
标签: php mysql performance pdo
从纯粹主义者的角度来看,在 SELECT 语句上使用事务以“提高性能”是错误的。使用事务确保不会出现数据不一致。
从性能的角度来看,锁定表以使其他语句无法访问它以加快您的 SELECT 可能工作 - 但可能有更好的解决方案比起那个来说。例如,在 SELECT statement 中使用 HIGH_PRIORITY 属性:
HIGH_PRIORITY 使 SELECT 更高 优先于更新的语句 一张桌子。您应该仅将其用于 查询速度非常快且必须 一次完成。一个 SELECT HIGH_PRIORITY 表时发出的查询 被锁定以进行阅读运行,即使 有更新语句等待 表是免费的。这影响 仅使用仅存储引擎 表级锁定(例如 MyISAM, 内存和合并)。
通过这种方式,您可以使用适当的方法来达到目标,而不是针对其他开发人员(甚至未来的您)会想知道它为什么存在的一些技巧。
【讨论】:
使用事务不会获得性能。
要获得性能,您可以执行EXPLAIN 并使用它来调整您的查询。
【讨论】:
如果您不修改数据,则使用事务没有多大意义,无论对性能的影响如何(实际上会造成伤害,但无济于事,因为管理事务需要时间/资源)。
当然,也有一些例外情况,例如尝试设置超时或锁定模式,但一般来说,显式事务对于只读操作来说是一种浪费。
【讨论】: