MSSQL 2008 R2 Выбор строк в определенном диапазоне - Пейджинг - как лучше - PullRequest
4 голосов
/ 23 сентября 2011

В настоящее время этот SQL-запрос может выбирать между определенными мной строками.Но есть ли лучший подход для этого?

  select * from (select *, ROW_NUMBER() over (order by Id desc) as RowId 
                 from tblUsersMessages ) dt
  where RowId between 10 and 25

1 Ответ

3 голосов
/ 23 сентября 2011

Зависит от ваших индексов.

Иногда это может быть лучше

SELECT *
FROM   tblUsersMessages
WHERE  Id IN (SELECT Id
              FROM   (select Id,
                             ROW_NUMBER() over (order by Id desc) as RowId
                      from   tblUsersMessages) dt
              WHERE  RowId between 10 and 25)  

Если существует более узкий индекс, который можно использовать для быстрого поиска значений Id в диапазоне. См. Мой ответ здесь для примера, который демонстрирует тип проблемы, которая может возникнуть.

Вам необходимо проверить планы выполнения и выходные данные SET STATISTICS IO ON для вашего конкретного случая.

...