Общее количество запросов на пейджинг занимает больше времени в SQL Server - PullRequest
0 голосов
/ 27 декабря 2018

В моем поисковом запросе ниже, 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...