Избирате първите 50 реда, подредени по e.uon desc
. Индекс, който започва с uon
ще ускори заявката:
create index IX_Empl_Uon on dbo.empl (uon)
Индексът ще позволи на SQL Server да сканира горните N реда на този индекс. N е най-голямото число във вашата пагинация:за 3-та страница от 50 елемента, N е равно на 150. След това SQL Server прави 50 ключови търсения, за да извлече пълните редове от клъстерирания индекс. Доколкото знам, това е учебникарски пример за това къде един индекс може да направи голяма разлика.
Не всички оптимизатори на заявки ще бъдат достатъчно умни, за да забележат, че row_number() over ... as rn
с where
rn between 1 and 50
означава първите 50 реда. Но SQL Server 2012 го прави. Той използва индекса както за първата, така и за последователните страници, като row_number() between 50 and 99
.