Du vælger de øverste 50 rækker sorteret efter e.uon desc
. Et indeks, der starter med uon
vil fremskynde forespørgslen:
create index IX_Empl_Uon on dbo.empl (uon)
Indekset vil tillade SQL Server at scanne de øverste N rækker af dette indeks. N er det højeste tal i din paginering:for den 3. side med 50 elementer er N lig med 150. SQL Server foretager derefter 50 nøgleopslag for at hente de fulde rækker fra det klyngede indeks. Så vidt jeg ved, er dette et lærebogseksempel på, hvor et indeks kan gøre en stor forskel.
Ikke alle forespørgselsoptimeringsværktøjer vil være smarte nok til at bemærke, at row_number() over ... as rn
med where
rn between 1 and 50
betyder de øverste 50 rækker. Men det gør SQL Server 2012. Det bruger indekset både til første og på hinanden følgende sider, såsom row_number() between 50 and 99
.