首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >非常慢的SQL查询

非常慢的SQL查询
EN

Stack Overflow用户
提问于 2013-05-07 14:27:32
回答 3查看 353关注 0票数 2

我对一个缓慢的查询有问题。考虑一下表tblVotes --它有两列-- VoterGuid,CandidateGuid。它持有选民投票给任何数目的候选人。

这张表中有300多万行--约有13 000名不同的选民投票给大约270万名不同的候选人。该表中的行总数目前为650万行。

我的查询试图实现的是-在最快和最高速缓存-有效的方式(我们正在使用SQL )-根据他们获得的选票数前1000名候选人。

守则是:

代码语言:javascript
复制
SELECT CandidateGuid, COUNT(*) CountOfVotes
FROM dbo.tblVotes
GROUP BY CandidateGuid
HAVING COUNT(*) > 1
ORDER BY CountOfVotes DESC

..。但是,当有一个非常满的表时,在上运行要花很长的时间。

有人能提出一个好的方法来加快速度并使它在快速的时间内运行吗?CandidateGuid是单独索引的--在CandidateGuid+VoterGuid上有一个复合主键。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-05-07 14:43:54

如果一个表中只有两个列,那么这两个字段上的“普通”索引不会对您有多大帮助,因为它实际上是整个表的副本,只是有序的。首先检查执行计划,如果您的索引正在使用。然后考虑将索引更改为聚集索引。

票数 1
EN

Stack Overflow用户

发布于 2013-05-07 15:00:58

尝试使用开头n,而不是词条,如下所示:

代码语言:javascript
复制
SELECT TOP 1000 CandidateGuid, COUNT(*) CountOfVotes
FROM dbo.tblVotes
GROUP BY CandidateGuid
ORDER BY CountOfVotes DESC
票数 0
EN

Stack Overflow用户

发布于 2013-05-07 16:35:41

我不知道Server是否能够使用复合索引来加快查询的速度,但是如果它能够这样做,则需要将查询表示为SELECT CandidateGUID, COUNT(VoterGUID) FROM . . .才能得到优化。这是“安全的”,因为您知道VoterGUID从来不是空的,因为它是主键的一部分。

如果您的复合主键被指定为( CandidateGUID,VoterGUID),那么您将不会从单独的CandidateGUID索引中获得任何额外的好处--现有的索引可以用于优化单例索引将帮助进行的任何查询。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16421581

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档