使用 ORDER BY 子句的查询速度变慢
MySQL 数据库用户遇到了与使用 ORDER BY 子句相关的令人费解的性能问题。当添加到具有多个联接和子查询的复杂查询时,查询的执行时间从毫秒显着增加到秒。
一个特定实例涉及一个查询,该查询从三个表中检索数据,其中最大的表中约有 40,000 行。如果没有 ORDER BY 子句,查询将获得最佳性能。然而,当使用任意列作为排序条件时,查询速度会减慢几个数量级,达到 10 秒左右。
这个问题的根本原因在于数据库的优化机制。默认情况下,MySQL 尝试通过创建临时表或使用子查询来优化查询。添加 ORDER BY 子句时,优化器会错误计算所需临时表的大小并分配不足的内存。因此,查询会回退到效率较低的排序算法,从而导致观察到的速度变慢。
一种可能的解决方法是使用相关子查询或 CTE(公用表表达式)重写查询以显式指定排序步骤。这允许优化器正确估计临时表大小,防止速度变慢。
以上是为什么我的 MySQL 查询 ORDER BY 如此慢?的详细内容。更多信息请关注PHP中文网其他相关文章!