sql >> Base de Datos >  >> RDS >> Sqlserver

¿Cómo calcula el servidor SQL el número estimado de filas?

SQL Server divide cada índice en hasta 200 rangos con los siguientes datos (de aquí ):

Por lo general, la mayoría de los valores poblados van en RANGE_HI_KEY .

Sin embargo, pueden entrar en el rango y esto puede provocar un sesgo en la distribución.

Imagina estos datos (entre otros):

Valor clave Recuento de filas

1          1
2          1
3          10000
4          1

SQL Server generalmente construye dos rangos:1 a 3 y 4 al siguiente valor poblado, lo que hace estas estadísticas:

RANGE_HI_KEY  RANGE_ROWS  EQ_ROWS  AVG_RANGE_ROWS  DISTINCT_RANGE_ROWS
3             2           10000    1               2

, lo que significa que al buscar, por ejemplo, 2 , solo hay 1 fila y es mejor usar el acceso de índice.

Pero si 3 va dentro del rango, las estadísticas son estas:

RANGE_HI_KEY  RANGE_ROWS  EQ_ROWS  AVG_RANGE_ROWS  DISTINCT_RANGE_ROWS
4             10002       1        3334            3

El optimizador cree que hay 3334 filas para la clave 2 y el acceso al índice es demasiado caro.