Каковы различия между старым row_number() и новым разбиением на страницы OFFSET + FETCH на SQL Server?
У меня мало вопросов в контексте более старого row_number (SQL Server 2008) и нового механизма подкачки OFFSET + FETCH (SQL Server 2012), предоставляемого SQL Server 2012.
- Каковы ограничения с row_number()?
- Является ли OFFSET + FETCH улучшенной заменой для row_number()?
- Есть ли какие-либо варианты использования, которых можно было бы использовать только один, а не другой?
- Существуют ли различия в производительности между этими двумя? Если да, то какой из них рекомендуется?
Спасибо.
Ответы
Ответ 1
Использование ROW_NUMBER()
отлично работает - это просто больше работы, чем необходимо; вам нужно написать CTE "скелет" вокруг вашего фактического запроса, добавить столбец ROW_NUMBER()
в свой выходной набор, а затем отфильтровать его.
Использование нового OFFSET / FETCH
проще - и да, это также лучше для производительности, поскольку эти две ссылки могут показать вам:
Итак, в общем: если вы используете SQL Server 2012 - тогда вы обязательно должны использовать OFFSET/FETCH
, а не ROW_NUMBER()
для подкачки
Ответ 2
в соответствии с этой статьей 3 метод сопоставления поискового вызова и результат в диаграмме полезен для выбора метода подкачки
Sql Server 2012 Методы пейджинга
весь метод подкачки в количестве мелкой записи работает нормально, но когда растет количество записей после разницы, то методы смены по-разному выглядят напрямую