В моем поисковом запросе ниже, 25 записей из 100 тыс. Записей всего за 2 секунды.Но когда я добавляю столбец TOTROWS
к моему запросу для получения общего количества записей (100 КБ), это занимает больше 1 минуты.Есть ли способ найти общее количество записей в оптимизированном виде?
Ниже работает быстро без включения столбца TOTROWS
во внешний запрос выбора.
DECLARE @PRODUCTNAME NVARCHAR(200),
@PAGE VARCHAR(100)
SET NOCOUNT ON;
DECLARE @ROWNUM INT = 25
DECLARE @ROWCOUNT
DECLARE @TOTROWS INT
DECLARE @XY INT
SET @PAGE = 1
SELECT TOP 25
ID, NAME
FROM
(SELECT
*,
TOTROWS = COUNT(ID) OVER()
FROM
(SELECT DISTINCT
TP.ID AS ID, TP.NAME AS [NAME],
ROW_NUMBER() OVER (ORDER BY TP.ID ASC) AS Row
FROM
PDF TP
<WHERE CONDITIONS>
UNION ALL
SELECT DISTINCT
TP.ID AS ID, TP.NAME AS [NAME],
ROW_NUMBER() OVER (ORDER BY TP.ID ASC) AS Row
FROM
HTML TP
WHERE <conditions>) a
WHERE
ROW > (@PAGE - 1) * 25) XY
Ниже выполняетсямедленно после добавления столбца TOTROWS
во внешний запрос выбора.
DECLARE @PRODUCTNAME NVARCHAR(200),
@PAGE VARCHAR(100)
SET NOCOUNT ON;
DECLARE @ROWNUM INT = 25
DECLARE @ROWCOUNT
DECLARE @TOTROWS INT
DECLARE @XY INT
SET @PAGE = 1
SELECT TOP 25
ID, NAME, TOTROWS
FROM
(SELECT
*,
TOTROWS = COUNT(ID) OVER()
FROM
(SELECT DISTINCT
TP.ID AS ID, TP.NAME AS [NAME],
ROW_NUMBER() OVER (ORDER BY TP.ID ASC) AS Row
FROM
PDF TP
<WHERE CONDITIONS>
UNION ALL
SELECT DISTINCT
TP.ID AS ID, TP.NAME AS [NAME],
ROW_NUMBER() OVER (ORDER BY TP.ID ASC) AS Row
FROM
HTML TP
WHERE <conditions>) a
WHERE
ROW > (@PAGE - 1) * 25) XY