4

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

Select Count(Distinct ColumnA)
from tableX 

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

即计数是否大于 1 或否?

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

4

1 回答 1

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找到前两个值后停止处理的计划。

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

例如,这两个计划都停止而不处理所有行。

计划

于 2013-03-20T10:14:55.537 回答