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.