Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Comment le serveur SQL calcule-t-il le nombre estimé de lignes ?

SQL Server divise chaque index en jusqu'à 200 plages avec les données suivantes (à partir de ici ):

Habituellement, les valeurs les plus renseignées vont dans RANGE_HI_KEY .

Cependant, ils peuvent entrer dans la fourchette, ce qui peut entraîner un biais de distribution.

Imaginez ces données (entre autres) :

Valeur clé Nombre de lignes

1          1
2          1
3          10000
4          1

SQL Server construit généralement deux plages :1 à 3 et 4 à la prochaine valeur renseignée, ce qui rend ces statistiques :

RANGE_HI_KEY  RANGE_ROWS  EQ_ROWS  AVG_RANGE_ROWS  DISTINCT_RANGE_ROWS
3             2           10000    1               2

, ce qui signifie que lors de la recherche de, disons, 2 , il n'y a que 1 ligne et il est préférable d'utiliser l'accès à l'index.

Mais si 3 va à l'intérieur de la plage, les statistiques sont les suivantes :

RANGE_HI_KEY  RANGE_ROWS  EQ_ROWS  AVG_RANGE_ROWS  DISTINCT_RANGE_ROWS
4             10002       1        3334            3

L'optimiseur pense qu'il y a 3334 lignes pour la clé 2 et l'accès à l'index est trop cher.