在复杂查询中使用 ORDER BY 时性能缓慢
在具有多个联接和子查询的复杂查询中,添加 ORDER BY 子句可以导致执行时间明显变慢。已在包含四个表且仅返回 13 行的查询中报告了此问题。没有 ORDER BY 子句时查询运行很快,但添加 ORDER BY 子句后变得缓慢。
解决方案
要解决此性能问题,建议将查询包装在子查询并将 ORDER BY 子句应用于外部查询。下面是修改后的查询:
SELECT * FROM ( SELECT Course.CourseID, Course.Description, UserCourse.UserID, UserCourse.TimeAllowed, UserCourse.CreatedOn, UserCourse.PassedOn, UserCourse.IssuedOn, C.LessonCnt FROM UserCourse INNER JOIN Course USING(CourseID) INNER JOIN ( SELECT CourseID, COUNT(*) AS LessonCnt FROM CourseSection GROUP BY CourseID ) C USING(CourseID) WHERE UserCourse.UserID = 8810 ) ORDER BY CourseID;
说明
此解决方案有效的原因是它允许优化器独立于 ORDER BY 操作来评估子查询。这会产生更高效的执行计划,并且不会受到缓慢的 ORDER BY 操作的影响。
以上是为什么使用 ORDER BY 时我的 SQL 查询速度很慢,如何修复它?的详细内容。更多信息请关注PHP中文网其他相关文章!