0

我在存储过程中使用带有union all运算符的 CTE 进行分页查询。

我也在分页查询中选择记录总数。但这需要几秒钟的时间。

CREATE PROCEDURE [dbo].[PAGING_NEW]
    @parameter1 NVARCHAR(200),
    @parameter2 NVARCHAR(200),
    @PAGE INT,
AS
    SET NOCOUNT ON;

    DECLARE @ROWNUM INT =24
    DECLARE @ROWCOUNT INT

    SET @ROWCOUNT = ((@PAGE - 1) * @ROWNUM)

    ;WITH TempResult AS 
    (
         QUERY 1
         WHERE CONDITIONS

         UNION ALL

         QUERY 2
         WHERE CONDITIONS
    ), TempCount AS
    (
        SELECT 
            COUNT(ID) AS TotalCount 
        FROM
            TempResult
    )
    SELECT
        ID, NAME, TEMPCOUNT.TotalCount  
    FROM 
        TempResult, TempCount 
    ORDER BY 
        Tempresult.ID
        OFFSET @ROWCOUNT ROWS FETCH NEXT @ROWNUM ROWS ONLY 

问题:

  1. 有没有其他方法来优化记录总数?
  2. 我可以提高union all分页查询的 CTE 性能吗?

现在我在分页查询中使用连接条件,但总计数不正确。

CREATE PROCEDURE [dbo].[PAGING_NEW]
        @parameter1 NVARCHAR(200),
        @parameter2 NVARCHAR(200),
        @PAGE INT,
    AS
        SET NOCOUNT ON;

        DECLARE @ROWNUM INT =24
        DECLARE @ROWCOUNT INT

        SET @ROWCOUNT = ((@PAGE - 1) * @ROWNUM)

        ;WITH TempResult AS 
        (
             QUERY 1
             WHERE CONDITIONS

             UNION ALL

             QUERY 2
             WHERE CONDITIONS
        ), TempCount AS
        (
            SELECT 
                COUNT(ID) AS TotalCount,ID AS ID
            FROM
                TempResult
        )
        SELECT
            TempResult.ID, NAME, TEMPCOUNT.TotalCount  
        FROM 
            TempResult 
            JOIN TempCount 
            ON TempResult.ID=TempCount.ID
        ORDER BY 
            Tempresult.ID
            OFFSET @ROWCOUNT ROWS FETCH NEXT @ROWNUM ROWS ONLY 
4

0 回答 0