Stai selezionando le prime 50 righe ordinate per e.uon desc
. Un indice che inizia con uon
accelererà la query:
create index IX_Empl_Uon on dbo.empl (uon)
L'indice consentirà a SQL Server di analizzare le prime N righe di questo indice. N è il numero più alto nell'impaginazione:per la terza pagina di 50 elementi, N è uguale a 150. SQL Server esegue quindi 50 ricerche di chiavi per recuperare le righe complete dall'indice cluster. Per quanto ne so, questo è un esempio da manuale di dove un indice può fare una grande differenza.
Non tutti gli ottimizzatori di query saranno abbastanza intelligenti da notare che row_number() over ... as rn
con where
rn between 1 and 50
indica le prime 50 righe. Ma SQL Server 2012 lo fa. Utilizza l'indice sia per la prima che per le pagine consecutive, come row_number() between 50 and 99
.