优化GROUP BY查询

时间:2012-03-12 09:56:04

标签: sql sql-server tsql sql-server-2008-r2

只是尝试优化SQL查询。

SELECT   Code, COUNT(*) 
FROM     tblData 
WHERE    ListID = 380 
GROUP BY Code

该表包含1000万条记录。因此查询通常需要4-5秒才能在SQL SERVER 2008 R2上找到记录。我发现了另一种表达方式:

SELECT a.Code, COUNT(*) 
FROM   (  SELECT * 
          FROM   tblData 
          WHERE  ListID = 380 
       ) a 
GROUP BY a.Code

虽然在我的测试中它会在完全相同的时间产生结果。但我想知道这是否比前一个更快,反之亦然。有什么想法吗?

3 个答案:

答案 0 :(得分:4)

使用任何体面的查询优化器,这两个查询应该归结为完全相同的操作。所以我发现它们在同一时间运行并不奇怪。

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

答案 1 :(得分:3)

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

但是,您可能会发现使用两列索引(在ListId上然后是Code)会提高性能,因为

  1. 数据库只会访问索引,而不是表;和
  2. 索引不需要做额外的排序,汇集在一起 必须一起计算的行。

答案 2 :(得分:0)

在Management Studio中,选择两个查询并单击“显示估计执行计划”。只要一个查询成本与50%不同,您就会获胜(并且更宽松)。

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