我在存储过程中使用带有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
问题:
- 有没有其他方法来优化记录总数?
- 我可以提高
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