【问题标题】:Should I run multiple SELECTs inside a PDO transaction for performance gains?我应该在 PDO 事务中运行多个 SELECT 以提高性能吗?
【发布时间】:2010-07-23 14:46:17
【问题描述】:

PDO 事务是否仅用于 UPDATE、INSERT 和 DELETE,或者如果您将事务用于多个 SELECT 查询,是否可以获得性能提升?

【问题讨论】:

    标签: php mysql performance pdo


    【解决方案1】:

    从纯粹主义者的角度来看,在 SELECT 语句上使用事务以“提高性能”是错误的。使用事务确保不会出现数据不一致。

    从性能的角度来看,锁定表以使其他语句无法访问它以加快您的 SELECT 可能工作 - 但可能有更好的解决方案比起那个来说。例如,在 SELECT statement 中使用 HIGH_PRIORITY 属性:

    HIGH_PRIORITY 使 SELECT 更高 优先于更新的语句 一张桌子。您应该仅将其用于 查询速度非常快且必须 一次完成。一个 SELECT HIGH_PRIORITY 表时发出的查询 被锁定以进行阅读运行,即使 有更新语句等待 表是免费的。这影响 仅使用仅存储引擎 表级锁定(例如 MyISAM, 内存和合并)。

    通过这种方式,您可以使用适当的方法来达到目标​​,而不是针对其他开发人员(甚至未来的您)会想知道它为什么存在的一些技巧。

    【讨论】:

      【解决方案2】:

      使用事务不会获得性能。

      要获得性能,您可以执行EXPLAIN 并使用它来调整您的查询。

      【讨论】:

        【解决方案3】:

        如果您不修改数据,则使用事务没有多大意义,无论对性能的影响如何(实际上会造成伤害,但无济于事,因为管理事务需要时间/资源)。

        当然,也有一些例外情况,例如尝试设置超时或锁定模式,但一般来说,显式事务对于只读操作来说是一种浪费。

        【讨论】:

          猜你喜欢
          • 2023-04-01
          • 1970-01-01
          • 2011-02-15
          • 2011-12-27
          • 2016-12-02
          • 1970-01-01
          • 2021-10-19
          • 2016-04-19
          • 2018-09-06
          相关资源
          最近更新 更多