我正在从一列(大约 50k 条记录的表)中寻找答案,我只需要检查该列中是否至少有两个不同的值。
Select Count(Distinct ColumnA)
from tableX
上面的查询给了我输出,但这不是优化的方式,因为我只想要一个布尔值的答案
即计数是否大于 1 或否?
此外,tableX 中的记录数增加会恶化查询性能,我正在寻找与表记录数无关的东西。任何帮助表示赞赏:) 谢谢。
我正在从一列(大约 50k 条记录的表)中寻找答案,我只需要检查该列中是否至少有两个不同的值。
Select Count(Distinct ColumnA)
from tableX
上面的查询给了我输出,但这不是优化的方式,因为我只想要一个布尔值的答案
即计数是否大于 1 或否?
此外,tableX 中的记录数增加会恶化查询性能,我正在寻找与表记录数无关的东西。任何帮助表示赞赏:) 谢谢。
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 MATCH
without(FLOW DISTINCT)
那么这是阻塞的,所有行仍将被处理。
例如,这两个计划都停止而不处理所有行。