MS-SQLSERVER - SQL-запрос с использованием ROW_NUMBER, занимающий много времени с 0 результатом запроса - PullRequest
0 голосов
/ 08 ноября 2011
select autoid from (SELECT ROW_NUMBER() OVER (ORDER 
BY MYTABLE.DETECTEDUTC DESC) as rownum, autoId from 
MYTABLE where MYTABLE.guid in (..guids..)) as tab1 where rownum >=1000 and rownum < 1020 

У нас есть таблица MYTABLE, которая может содержать миллионы записей, в настоящее время она имеет 10 миллионов записей. Приведенный выше SQL-запрос, используемый для получения разбитых на страницы данных в нашем коде, работает нормально до тех пор, пока запрос не даст результатов, но зависает в течение нескольких часов, если запрос возвращает 0 результатов. Также SQL-сервер начинает использовать системную оперативную память при выполнении запроса выше и не возвращает никакой записи.

с другой стороны, следующий запрос отлично работает с 0 результатами -

select autoid from (SELECT ROW_NUMBER() OVER (ORDER 
BY MYTABLE.DETECTEDUTC DESC) as rownum, autoId from 
MYTABLE where MYTABLE.guid in( ..guids..)) as tab1

1 Ответ

0 голосов
/ 08 ноября 2011

Независимо от проблемы в запросе, я представляю способ, которым я обычно достигаю подкачки:

В качестве ввода (например, для хранимой процедуры):

@fromIndex int = 0 -- default starting from index 0
@count int = 10 -- default returning 10 items per page

Общая логика SQL:

CREATE TABLE #PaginatedItems (
    Column1 int, -- declare your needed columns here
    Column2 varchar(50),
    rowIndex int -- needed for pagination logic
);

WITH OrderedItems AS
    (
        SELECT
            SourceTable.Col1, -- will end up in #PaginatedItems.Column1
            SourceTable.Col2,
            ROWNUMBER() OVER (
                                 ORDER BY <sort criteria>
                             ) AS rowIndex
        FROM
            SourceTable
    )
INSERT INTO
    #PaginatedItems
SELECT
    *
FROM
    OrderedItems
WHERE
    rowIndex >= @fromIndex + 1 AND rowIndex <= @fromIndex + @count

SELECT * FROM #PaginatedItems -- the query that returns the items

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...