在複雜查詢中使用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中文網其他相關文章!