检查列中不同值的优化方法

时间:2013-03-20 09:09:36

标签: sql sql-server query-performance

我正在寻找一个答案,从一个列(约50k记录的表)我只需要检查该列是否至少有两个不同的值。

Select Count(Distinct ColumnA)
from tableX 

上面的查询给出了输出,但它不是优化的方式,因为我只想要布尔的答案

即。数量超过1还是否?

此外,tableX中记录增加的数量会使查询性能恶化,我正在寻找与表记录计数无关的东西。 感谢任何帮助:)谢谢。

1 个答案:

答案 0 :(得分:6)

SELECT CASE
         WHEN COUNT(*) = 2 THEN 'Yes'
         ELSE 'No'
       END
FROM   (SELECT DISTINCT TOP 2 ColumnA
        FROM tableX
        WHERE ColumnA IS NOT NULL) T 

在找到前两个DISTINCT值后,可能会给您一个停止处理的计划。

检查执行计划是否使用流聚合或HASH MATCH (FLOW DISTINCT),因为它们都是非阻塞的。如果DISTINCT被实现为HASH MATCH而没有(FLOW DISTINCT),那么这将被阻止,所有行仍将被处理。

e.g。这两个计划都停止而不处理所有行。

Plan