首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >优化组BY查询

优化组BY查询
EN

Stack Overflow用户
提问于 2012-03-12 17:56:04
回答 3查看 3.6K关注 0票数 0

只是在尝试优化SQL查询。

代码语言:javascript
复制
SELECT   Code, COUNT(*) 
FROM     tblData 
WHERE    ListID = 380 
GROUP BY Code

该表包含1000万条记录。因此,查询通常需要4-5秒来查找SQL server2008 R2上的记录。我找到了另一种表达方式:

代码语言:javascript
复制
SELECT a.Code, COUNT(*) 
FROM   (  SELECT * 
          FROM   tblData 
          WHERE  ListID = 380 
       ) a 
GROUP BY a.Code

虽然在我的测试中,它在完全相同的时间内产生结果。但我想知道这是比前一个快还是签证快。有什么想法吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-03-12 18:01:22

对于任何像样的查询优化器,这两个查询应该归结为完全相同的操作。所以你发现它们同时运行我一点也不惊讶。

我不认为你可以修改你的查询来使它运行得更快。当然,你能做的就是在ListID上建立一个索引--但我想你已经有了。

票数 4
EN

Stack Overflow用户

发布于 2012-03-12 18:08:33

正如@cornuz和@Wim所说,这两个查询应该是等价的。

但是,您可能会发现,具有两列索引(在ListId上,然后在代码上)会大大提高性能,因为

  1. 数据库将只访问索引,而不是表;
  2. 索引将不需要执行额外的排序,即可将必须计算的行聚集在一起。
票数 3
EN

Stack Overflow用户

发布于 2012-03-12 18:06:42

在Management Studio中,选择这两个查询,然后单击“显示估计的执行计划”。一旦一个查询成本与50%不同,你就有了赢家(和输家)。

在通过Analyser之后,您的第二个查询看起来就是第一个查询的结果。我认为两者的表现完全相同。

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

https://stackoverflow.com/questions/9664903

复制
相关文章

相似问题

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