SQL Server divide ogni indice in un massimo di 200 intervalli con i seguenti dati (da qui
):
Di solito, la maggior parte dei valori popolati va in RANGE_HI_KEY .
Tuttavia, possono entrare nell'intervallo e questo può portare alla distorsione nella distribuzione.
Immagina questi dati (tra gli altri):
Valore chiave Conteggio di righe
1 1
2 1
3 10000
4 1
SQL Server di solito crea due intervalli:1 a 3 e 4 al successivo valore popolato, che crea queste statistiche:
RANGE_HI_KEY RANGE_ROWS EQ_ROWS AVG_RANGE_ROWS DISTINCT_RANGE_ROWS
3 2 10000 1 2
, che significa quando si cerca, ad esempio, 2 , c'è solo 1 riga ed è meglio utilizzare l'accesso all'indice.
Ma se 3 entra nel range, le statistiche sono queste:
RANGE_HI_KEY RANGE_ROWS EQ_ROWS AVG_RANGE_ROWS DISTINCT_RANGE_ROWS
4 10002 1 3334 3
L'ottimizzatore pensa che ci siano 3334 righe per la chiave 2 e l'accesso all'indice è troppo costoso.