Du väljer de 50 översta raderna sorterade efter e.uon desc
. Ett index som börjar med uon
kommer att påskynda frågan:
create index IX_Empl_Uon on dbo.empl (uon)
Indexet tillåter SQL Server att skanna de N översta raderna i detta index. N är det högsta numret i din sidnumrering:för den tredje sidan med 50 element är N lika med 150. SQL Server gör sedan 50 nyckeluppslagningar för att hämta de fullständiga raderna från det klustrade indexet. Så vitt jag vet är detta ett läroboksexempel på var ett register kan göra stor skillnad.
Alla frågeoptimerare kommer inte att vara smarta nog att lägga märke till att row_number() over ... as rn
med where
rn between 1 and 50
betyder de 50 översta raderna. Men det gör SQL Server 2012. Den använder index både för första och på varandra följande sidor, som row_number() between 50 and 99
.