优化GROUP BY查询



只是试图优化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

尽管在我的测试中,它在完全相同的时间内产生结果。但我想知道这是比前一次快还是反之亦然。知道吗?

使用任何合适的查询优化器,这两个查询都应该归结为完全相同的操作。所以你发现它们同时运行,我并不感到惊讶。

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

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

然而,您可能会发现,拥有两列索引(在ListId上,然后是Code)会大大提高性能,因为

  1. 数据库只访问索引,而不是表;以及
  2. 索引不需要做额外的排序,就可以将必须一起计数的行

在Management Studio中,选择两个查询并单击"显示估计执行计划"。只要一个查询成本与50%不同,你就有赢家(和一个松散者)。

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

最新更新