我从学区数据库(SQL Server 2008R2)的存储过程中取出(并匿名)了一些行:
INSERT INTO ClassFilter -- guaranteed empty
SELECT
Class.iClassID,
'Literal Text',
COUNT(iStudentID)
FROM
Class INNER JOIN StudentClass ON Class.iClassID = StudentClass.iClassID
GROUP BY
Class.iClassID
Class
表只有2000条,ClassStudent
大约有30,000条。执行此操作的存储过程大约需要25秒才能完成,如果可能的话我想减少这种情况。
谢谢!
答案 0 :(得分:0)
你有iClassID索引吗?看起来你需要一个。
答案 1 :(得分:0)
原因很慢,可能是你错过了几个索引,或者索引太多了。
我会确保你的班级表上有一个主键,以及学生班级表中的iClassId索引。
答案 2 :(得分:0)
我同意这应该不花时间,即使你有很多索引,除非你有大的literal
和CLUSTERED INDEX
索引文字。
Execution Plan
吗?
你会尝试在CTE
之前积累update
并在UPDATE
这样的事情中积累:
;WITH StudentsInClass AS
(
SELECT iClassID, COUNT(0) AS StudentsCount
FROM StudentClass
GROUP BY iClassID
)
INSERT INTO ClassFilter -- guaranteed empty
SELECT
Class.iClassID,
'Literal Text',
StudentsCount
FROM Class
INNER JOIN StudentsInClass ON Class.iClassID = StudentsInClass.iClassID