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

Cha*_*tta 4 sql sql-server query-performance

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

Select Count(Distinct ColumnA)
from tableX 
Run Code Online (Sandbox Code Playgroud)

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

即计数是否超过1或否?

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

Mar*_*ith 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 
Run Code Online (Sandbox Code Playgroud)

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

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

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

计划