如何做一个SQL计数最多x个?

抄送

我想知道一个给定的查询是否以一种高性能的方式包含超过 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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章