184
Chapitre 6. Utilisation des index
la définition des index). Ensuite, il sait qu’il dispose d’un index sur la colonne ProductId, qui va lui permettre de filtrer rapidement les enregistrements où ProductId =
800 :
SELECT *
FROM sys.indexes i
WHERE OBJECT_NAME(i.object_id)
L’index s’appelle IX_TransactionHistory_ProductId.
L’optimiseur de SQL Server se base sur l’évaluation du coût d’un plan d’exécution afin de déterminer la meilleure stratégie. C’est ce qu’on appelle une optimisation basée sur le coût (cost-based optimization).
Mais pour évaluer le coût d’un plan d’exécution, SQL Server ne peut se contenter des seules informations que nous venons de voir. Il doit disposer d’une estimation
du nombre de lignes qui va être retourné, pour juger au plus juste du coût de celle-ci.
C’est là où interviennent les statistiques.
Si SQL Server dispose de statistiques de distribution des valeurs contenues dans
une colonne, il peut évaluer avec une bonne précision le nombre de lignes concernées lorsqu’une requête filtre sur ces valeurs, car il sait à l’avance combien de lignes
environ correspondent au critère.
Les statistiques sont donc un échantillonnage des données. Elles sont créées et
maintenues automatiquement par SQL Server sur la clé de tout index créé. Elles
sont visibles dans les vues sys.stats et sys.stats_columns.
Voyons les statistiques de l’index sur ProductId :
SELECT c.name as ColumnName, s.name as IndexName
FROM sys.stats s
JOIN sys.stats_columns sc ON s.object_id = sc.object_id
AND s.stats_id = sc.stats_id
JOIN sys.columns c ON s.object_id = c.object_id
AND sc.column_id = c.column_id
WHERE s.name = 'IX_TransactionHistory_ProductId'
Tableau 6.4 — Nom de l’index
Cela montre qu’il existe des statistiques dans cet index pour la colonne ProductId.
Elles sont en quelque sorte les informations vitales de l’index, ou son diplôme :
elles permettent à SQL Server, dans sa stratégie, d’estimer le coût d’utilisation de
l’index. En d’autres termes, grâce aux statistiques, SQL Server va pouvoir connaître
à l’avance, approximativement, le résultat d’un :
ColumnName
IndexName
ProductID
IX_TransactionHistory_ProductID
Chapitre 6. Utilisation des index
la définition des index). Ensuite, il sait qu’il dispose d’un index sur la colonne ProductId, qui va lui permettre de filtrer rapidement les enregistrements où ProductId =
800 :
SELECT *
FROM sys.indexes i
WHERE OBJECT_NAME(i.object_id)
L’index s’appelle IX_TransactionHistory_ProductId.
L’optimiseur de SQL Server se base sur l’évaluation du coût d’un plan d’exécution afin de déterminer la meilleure stratégie. C’est ce qu’on appelle une optimisation basée sur le coût (cost-based optimization).
Mais pour évaluer le coût d’un plan d’exécution, SQL Server ne peut se contenter des seules informations que nous venons de voir. Il doit disposer d’une estimation
du nombre de lignes qui va être retourné, pour juger au plus juste du coût de celle-ci.
C’est là où interviennent les statistiques.
Si SQL Server dispose de statistiques de distribution des valeurs contenues dans
une colonne, il peut évaluer avec une bonne précision le nombre de lignes concernées lorsqu’une requête filtre sur ces valeurs, car il sait à l’avance combien de lignes
environ correspondent au critère.
Les statistiques sont donc un échantillonnage des données. Elles sont créées et
maintenues automatiquement par SQL Server sur la clé de tout index créé. Elles
sont visibles dans les vues sys.stats et sys.stats_columns.
Voyons les statistiques de l’index sur ProductId :
SELECT c.name as ColumnName, s.name as IndexName
FROM sys.stats s
JOIN sys.stats_columns sc ON s.object_id = sc.object_id
AND s.stats_id = sc.stats_id
JOIN sys.columns c ON s.object_id = c.object_id
AND sc.column_id = c.column_id
WHERE s.name = 'IX_TransactionHistory_ProductId'
Tableau 6.4 — Nom de l’index
Cela montre qu’il existe des statistiques dans cet index pour la colonne ProductId.
Elles sont en quelque sorte les informations vitales de l’index, ou son diplôme :
elles permettent à SQL Server, dans sa stratégie, d’estimer le coût d’utilisation de
l’index. En d’autres termes, grâce aux statistiques, SQL Server va pouvoir connaître
à l’avance, approximativement, le résultat d’un :
ColumnName
IndexName
ProductID
IX_TransactionHistory_ProductID
