我应该在 PDO 事务中运行多个 SELECT 来提高性能吗?

发布于 2024-09-11 07:18:28 字数 73 浏览 3 评论 0 原文

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

Are PDO transcations intended just for UPDATE, INSERT and DELETE or can you achieve performance gains if you use a transaction for mulitple SELECT queries?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

娇纵 2024-09-18 07:18:28

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

从性能的角度来看,锁定表以便其他语句无法访问它,以加快您的 SELECT 可能有效 - 但可能有比这更好的解决方案。例如,在 HIGH_PRIORITY 属性rel="nofollow noreferrer">SELECT 语句

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

通过这种方式,您可以使用适当的方法来实现目标,而不是其他开发人员(甚至未来的您)会想知道它为什么存在的一些黑客行为。

From a purist point of view, it would be wrong to use a transaction on SELECT statements 'to improve performance'. Use a transaction to be sure to not get inconsistencies in the data.

From a performance point of view, locking the tables so no other statement can access it in order to speed up your SELECTs might work - but there are probably better solutions than that. For example, use the HIGH_PRIORITY attribute in your SELECT statement:

HIGH_PRIORITY gives the SELECT higher
priority than a statement that updates
a table. You should use this only for
queries that are very fast and must be
done at once. A SELECT HIGH_PRIORITY
query that is issued while the table
is locked for reading runs even if
there is an update statement waiting
for the table to be free. This affects
only storage engines that use only
table-level locking (such as MyISAM,
MEMORY, and MERGE).

This way you use the appropriate method to reach the goal, instead of some hack about which other developers (or even a future you) will wonder why it exists.

玩世 2024-09-18 07:18:28

您不会通过使用事务来获得性能。

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

You will not gain performance by using transaction.

To gain performance, you can do an EXPLAIN and use that to tune your queries.

隐诗 2024-09-18 07:18:28

如果您不修改数据,那么使用事务就没有多大意义,无论对性能的影响如何(这实际上会损害而不是帮助,因为管理事务需要时间/资源)。

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

If you aren't modifying data, there's not much point in using a transaction, regardless of the impact on performance (which it would actually hurt, not help, since it takes time/resources to manage a transaction).

Of course, there are a few exceptions like if you are trying to set timeouts or lock modes, but in general, explicit transactions are a waste for read-only operations.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文