我对 SQL Server 2005 中的执行计划很陌生,但这让我感到困惑。
当我运行以下代码时……
((SELECT COUNT(DISTINCT StudentID)
FROM vwStudentUnitSchedules AS v
WHERE v.UnitActive = 1
AND v.UnitOutcomeCode IS NULL
AND v.UnitCode = su.UnitCode
AND v.StartDate = su.StartDate
AND v.StudentCampus = st.StudentCampus) - 1) AS ClassSize
获取类大小时,如果以通用方式运行,需要大约30秒的时间才能超时。
但是,当我进行轻微修改后运行它...
((SELECT COUNT(DISTINCT LTRIM(RTRIM(UPPER(StudentID))))
FROM vwStudentUnitSchedules AS v
WHERE v.UnitActive = 1
AND v.UnitOutcomeCode IS NULL
AND v.UnitCode = su.UnitCode
AND v.StartDate = su.StartDate
AND v.StudentCampus = st.StudentCampus) - 1) AS ClassSize
它几乎瞬间运行。
这是因为 LTRIM()、RTRIM() 和 UPPER() 函数吗?为什么它们会让事情变得更快呢?我想这是因为 COUNT(DISTINCT 是一个按从左到右字符计数的聚合函数?是的,StudentID 是一个 VARCHAR(10)。
谢谢。
set statistics io on
吗?查询计划看起来还好吗? - sisve