Если вы занимались веб-программированием или каким-либо подобным сценарием, для которого необходимо читать данные из базы данных частями по соображениям производительности, вы определенно сталкивались с реализацией разбивки на страницы для выборки данных из базы данных постранично.

После введения функции ROW_NUMBER () SQL Server я использовал для этого, используя это, с добавлением предложений where для столбца ROW_NUMBER, чтобы пропустить определенное количество идентификаторов и ВЗЯТЬ определенное количество строк, которые я хочу вот так:

SELECT ROW_NUMBER() OVER( ORDER BY AgreementNUmber) , * FROM [Agreement] ORDER BY [AgreementNumber] OFFSET 10 ROWS FETCH NEXT 50 ROWS ONLY;

Или иногда я открываю все представление или таблицу, а затем в приложении я использую команды SKIP и TAKE C # LINQ для реализации разбивки на страницы, как это в C #:

var myPage = AgreementList.Skip(10).Take(5);

но теперь я вижу, что SQL SERVER 2012 представил эти команды OFFSET FETCH, с которыми вы можете сделать это намного проще.

Вот как это сделать:

SELECT * FROM [Agreement] ORDER BY [AgreementNumber] OFFSET 10 ROWS FETCH NEXT 50 ROWS ONLY;

Как вы можете легко догадаться, номер 10 - это номер ПРОПУСКА, а номер 5 - это номер ВЗЯТЬ или РАЗМЕР СТРАНИЦЫ.

А потом я сделал простой SQL STATISTICS VIEW, чтобы увидеть, какой из них лучше с точки зрения производительности, и обнаружил, что OFFSET FETCH в два раза быстрее, чем ROW_NUMBER!

Я попробовал тот же запрос на таблице с 10 000 строками, и у меня было такое время выполнения сервера sql! но все же это может быть разным в разных наборах данных

Время выполнения SQL Server: (с ROW_NUMBER ())
Процессорное время = 31 мс, затраченное время = 28 мс.
Время выполнения SQL Server: (с OFFSET и FETCH)
Процессорное время = 16 мс, прошедшее время = 15 мс.

Поэтому я действительно думаю, что мне следует просмотреть свои существующие коды разбивки на страницы и попытаться заменить их этим новым, если это возможно, поскольку это намного проще реализовать и намного быстрее (по крайней мере, с этим набором данных, с которым я тестировал)