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

In che modo SQL Server calcola il numero stimato di righe?

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.