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.