187
6.4 Statistiques
Pour voir les statistiques créées automatiquement :
SELECT * FROM sys.stats WHERE auto_created = 1
leur nom commence par _WA_Sys_.
6.4.3 Sélectivité et densité
Ces statistiques de distribution permettent de déterminer la sélectivité d’un index.
Plus le nombre de données uniques présentes dans la colonne est élevé, plus l’index
est dit sélectif. La plus haute sélectivité est donnée par un index unique, où toutes les
valeurs sont distinctes, et les plus basses sélectivités sont amenées par des colonnes
qui contiennent beaucoup de doublons, comme les colonnes de type BIT, ou CHAR(1)
avec seulement quelques valeurs (par exemple H et F pour une colonne de type
sexe).
À l’inverse, la densité représente le nombre de valeurs dupliquées présentes dans
la colonne. Plus il y a de valeurs dupliquées, plus la densité est élevée.
Sur l’index dans son entier, le pourcentage moyen de lignes dupliquées donne la
sélectivité et la densité : plus ce pourcentage est faible, plus l’index est sélectif, et
plus il est élevé, plus l’index est dense. La densité s’oppose donc à la sélectivité.
6.4.4 Consultation des statistiques
Nous avons quelquefois entendu des imprécisions au sujet des statistiques. Les statistiques ne sont pas des index, et ne sont pas stockées comme les index ou dans les
pages d’index. Notamment les informations de distribution ne se situent pas au
niveau des nœuds de l’arborescence de l’index. Si c’était le cas, le plan d’exécution
ne pourrait pas faire le choix d’utiliser l’index ou non... avant de l’utiliser, puisqu’il
devrait entrer dans l’arborescence pour retrouver l’estimation de lignes à retourner,
puis ensuite quitter l’index pour faire un scan si ce choix lui paraît meilleur.
Ce genre de décision doit se prendre avant de commencer le processus de recherche des données.
Ainsi, les données de statistiques sont disponibles en tant que métadonnées de
l’index, et non pas dans sa structure propre. Elles sont stockées dans une colonne de
type LOB, dans une table système visible à travers la vue sys.sysindexes (du nom
d’une ancienne table système de SQL Server 2000).
La requête
SELECT statblob
FROM sys.sysindexes
permet de voir que la colonne statblob, qui contient ces informations de statistiques, retourne NULL. La colonne contient bien des données, mais elles ne sont pas
6.4 Statistiques
Pour voir les statistiques créées automatiquement :
SELECT * FROM sys.stats WHERE auto_created = 1
leur nom commence par _WA_Sys_.
6.4.3 Sélectivité et densité
Ces statistiques de distribution permettent de déterminer la sélectivité d’un index.
Plus le nombre de données uniques présentes dans la colonne est élevé, plus l’index
est dit sélectif. La plus haute sélectivité est donnée par un index unique, où toutes les
valeurs sont distinctes, et les plus basses sélectivités sont amenées par des colonnes
qui contiennent beaucoup de doublons, comme les colonnes de type BIT, ou CHAR(1)
avec seulement quelques valeurs (par exemple H et F pour une colonne de type
sexe).
À l’inverse, la densité représente le nombre de valeurs dupliquées présentes dans
la colonne. Plus il y a de valeurs dupliquées, plus la densité est élevée.
Sur l’index dans son entier, le pourcentage moyen de lignes dupliquées donne la
sélectivité et la densité : plus ce pourcentage est faible, plus l’index est sélectif, et
plus il est élevé, plus l’index est dense. La densité s’oppose donc à la sélectivité.
6.4.4 Consultation des statistiques
Nous avons quelquefois entendu des imprécisions au sujet des statistiques. Les statistiques ne sont pas des index, et ne sont pas stockées comme les index ou dans les
pages d’index. Notamment les informations de distribution ne se situent pas au
niveau des nœuds de l’arborescence de l’index. Si c’était le cas, le plan d’exécution
ne pourrait pas faire le choix d’utiliser l’index ou non... avant de l’utiliser, puisqu’il
devrait entrer dans l’arborescence pour retrouver l’estimation de lignes à retourner,
puis ensuite quitter l’index pour faire un scan si ce choix lui paraît meilleur.
Ce genre de décision doit se prendre avant de commencer le processus de recherche des données.
Ainsi, les données de statistiques sont disponibles en tant que métadonnées de
l’index, et non pas dans sa structure propre. Elles sont stockées dans une colonne de
type LOB, dans une table système visible à travers la vue sys.sysindexes (du nom
d’une ancienne table système de SQL Server 2000).
La requête
SELECT statblob
FROM sys.sysindexes
permet de voir que la colonne statblob, qui contient ces informations de statistiques, retourne NULL. La colonne contient bien des données, mais elles ne sont pas
