【发布时间】:2010-10-27 10:42:59
【问题描述】:
这是查询(最大的表大约有 40,000 行)
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
如果我运行它,它会执行得非常快(大约 0.05 秒)。它返回 13 行。
当我在查询末尾添加 ORDER BY 子句(按任何列排序)时,查询大约需要 10 秒。
我现在在生产中使用这个数据库,一切正常。我所有的其他查询都很快。
有什么想法吗?我在 MySQL 的查询浏览器和命令行中运行了查询。 ORDER BY 在这两个地方都非常缓慢。
编辑: Tolgahan ALBAYRAK 解决方案有效,但谁能解释它为什么有效?
【问题讨论】:
-
为什么有效?子查询将结果放入结果集中,对结果集进行排序比让默认查询执行在排序过程中计数要快得多。
标签: mysql sql-order-by