我想知道一个给定的查询是否以一种高性能的方式包含超过 x 个元素。假设我有一个输出 20 亿行的查询,但我只想知道结果集是否大于 10k,如果没有 SQL 引擎计数到 20 亿行,我该怎么做?
我试过这个
SELECT 1
WHERE EXISTS (SELECT COUNT(1) FROM mytable
WHERE somefilter = 58
HAVING COUNT(1) < 10000)
但它似乎和简单的计数一样慢(或更多)
SELECT COUNT(1)
WHERE somefilter = 58
这适用于 SQL Server 2016。
有任何想法吗?
你可以做:
select 1
where (select count(*)
from (select top (10000) 1
from mytable
where somefilter = 58
) x
) < 10000
最里面的子查询最多返回 10,000 行。如果超过 10,000,则查询在前 10,000 处停止并返回 10,000。
注意:如果少于 10,000 行,那么这不会影响性能,因为需要生成所有行。您可能需要添加索引或分区才能真正提高性能。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句