我遇到缓慢查询的问题。考虑表tblVotes - 它有两列 - VoterGuid,CandidateGuid。它拥有选民投给任何候选人的选票。非常慢的SQL查询
有超过300万行此表 - 与13000不同的选民投票时,约270万考生不同。该表中的行总数目前为650万。
什么我的查询要达到的目的是让 - 尽可能以最快和最高速高效的方式(我们使用的SQL Express) - 根据他们收到的票数排名前1000的候选人。
的代码是:
SELECT CandidateGuid, COUNT(*) CountOfVotes
FROM dbo.tblVotes
GROUP BY CandidateGuid
HAVING COUNT(*) > 1
ORDER BY CountOfVotes DESC
...但是这需要一个scarily很长时间才能在SQL Express运行时,有一个非常完整的表。
任何人可以提出一个很好的方式来加快这得到它在快速的时间运行? CandidateGuid被单独编入索引 - 并且CandidateGuid + VoterGuid上有一个复合主键。
我认为你需要CountOfVotes上的额外索引,因为你的排序是通过它来完成的,Count也会对它进行评估。 – DrCopyPaste 2013-05-07 14:30:57
CountOfVotes计算在这个查询里面,它不是一个永久性的可索引列吗? – Jackfruit 2013-05-07 14:36:14
哦,我的,它在这里迟到我很抱歉:) – DrCopyPaste 2013-05-07 14:38:51