Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Le letture non stanno scendendo dopo aver inserito un indice

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 .