SELECT COUNT 限制行数

问题描述 投票:0回答:1

我们要首先检查表行数,然后根据行数决定应该做什么。因为我们有一个逻辑,如果表行数超过一定数量,我们将尝试不同的逻辑。

SELECT COUNT(*) FROM Table1.  

最简单,但如果桌子很大,它可能会非常昂贵。 所以我们尝试遵循 Oracle 中的逻辑

SELECT COUNT(*) FROM Table1 WHERE ROWNUM <= 1000000;

如果上面的查询返回 1000000,那么我们就知道这个表大于 1000,000。那么我们将使用不同的方式来处理它。 现在我们也希望 SQL Server 具有类似的逻辑,但我没有看到任何简单的方法来做到这一点。 SQL Server 提供了 TOP 语句,但它的工作方式并不像下面这样:

SELECT COUNT( TOP 1000000 *) FROM Table1 

有人知道吗?

sql sql-server
1个回答
0
投票

如果您坚持避免使用元数据表,则可以在子选择中使用

TOP N
选项,如下所示:

DECLARE @RowCountLimited INT = (
    SELECT COUNT(*)
    FROM (
        SELECT TOP 101 *
        FROM TableA
    ) S
)
  
SELECT  @RowCountLimited

您也可以将

EXISTS()
ORDER BY ... OFFSET ... FETCH ...
语法一起使用。这需要一个
ORDER BY
,但是如果您选择索引列或PK,则计划中不会生成排序操作。

DECLARE @RowCountIsMoreThan100 BIT = CASE WHEN EXISTS (
    SELECT *
    FROM TableB
    WHERE IsActive = 1
    ORDER BY IsActive
    OFFSET 100 ROWS FETCH NEXT 1 ROWS ONLY
) THEN 1 ELSE 0 END
  
SELECT @RowCountIsMoreThan100

以上任一条件都可以包含

WHERE
条件。

请参阅 this db<>fiddle 以获取演示,其中的执行计划显示实际仅读取有限数量的行。

© www.soinside.com 2019 - 2024. All rights reserved.