标签: sql sql-server query-performance
我正在寻找一个答案,从一个列(约50k记录的表)我只需要检查该列是否至少有两个不同的值。
Select Count(Distinct ColumnA) from tableX
上面的查询给出了输出,但它不是优化的方式,因为我只想要布尔的答案
即。数量超过1还是否?
此外,tableX中记录增加的数量会使查询性能恶化,我正在寻找与表记录计数无关的东西。 感谢任何帮助:)谢谢。
答案 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值后,可能会给您一个停止处理的计划。
DISTINCT
检查执行计划是否使用流聚合或HASH MATCH (FLOW DISTINCT),因为它们都是非阻塞的。如果DISTINCT被实现为HASH MATCH而没有(FLOW DISTINCT),那么这将被阻止,所有行仍将被处理。
HASH MATCH (FLOW DISTINCT)
HASH MATCH
(FLOW DISTINCT)
e.g。这两个计划都停止而不处理所有行。