只是试图优化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
上有一个索引,但我希望你已经有了。
然而,您可能会发现,拥有两列索引(在ListId上,然后是Code)会大大提高性能,因为
- 数据库只访问索引,而不是表;以及
- 索引不需要做额外的排序,就可以将必须一起计数的行
在Management Studio中,选择两个查询并单击"显示估计执行计划"。只要一个查询成本与50%不同,你就有赢家(和一个松散者)。
您的第二个查询在通过Analyser之后看起来是第一个查询的结果。我认为两者的表现将完全相同。