186
Chapitre 6. Utilisation des index
SET SHOWPLAN_XML ON
GO
SELECT *
FROM Production.TransactionHistory
WHERE ProductId = 760
GO
SET SHOWPLAN_XML OFF
GO
Un extrait du plan d’exécution estimé :
EstimateRows="5.28571" EstimateIO="0.003125"
EstimateCPU="0.000162814"
AvgRowSize="15" EstimatedTotalSubtreeCost="0.00328781" Parallel="0"
EstimateRebinds="0" EstimateRewinds="0">
...
Table="[TransactionHistory]"
Index="[IX_TransactionHistory_ProductID]" />
Cette fois-ci nous voyons que l’index est utilisé : c’est la solution la moins coûteuse. L’estimation des lignes à retourner, basée sur les statistiques de distribution,
donne 5,28571 lignes. Nous verrons plus loin d’où SQL Server tire cette approximation.
6.4.2 Colonnes non indexées
Les statistiques ne sont pas uniquement utiles pour les index. L’optimiseur peut
profiter de la présence de statistiques même sur des colonnes qui ne font pas partie de
la clé d’un index. Cela lui permettra d’évaluer le nombre de lignes retournées dans
une requête qui filtre sur les valeurs de cette colonne, et donc de choisir un bon plan
d’exécution. Par exemple, si la colonne participe à un JOIN, cela permettra à l’optimiseur de choisir le type de jointure le plus adapté.
En SQL Server 2000, comme les statistiques de colonne sont stockées dans la
table système sysindexes avec la définition des index, la création de statistiques
avait comme conséquence de diminuer le nombre possible d’index pouvant être
créés sur la table.
Vous étiez limités à 249 index nonclustered par table, donc à 249 index plus statistiques.
Sur des tables contenant beaucoup de colonnes, la création automatique des statistiques pouvait vous faire atteindre cette limite. Il vous fallait alors supprimer des
statistiques (avec la commande DROP STATISTICS) pour permettre la création de nouveaux index.
Dans SQL Server 2005, la limite du nombre de statistiques de colonne sur une
table a été augmentée à 2000, plus 249 statistiques d’index, poussant le nombre de
statistiques possibles sur une table à 2249.
Chapitre 6. Utilisation des index
SET SHOWPLAN_XML ON
GO
SELECT *
FROM Production.TransactionHistory
WHERE ProductId = 760
GO
SET SHOWPLAN_XML OFF
GO
Un extrait du plan d’exécution estimé :
EstimateCPU="0.000162814"
AvgRowSize="15" EstimatedTotalSubtreeCost="0.00328781" Parallel="0"
EstimateRebinds="0" EstimateRewinds="0">
...
Table="[TransactionHistory]"
Index="[IX_TransactionHistory_ProductID]" />
Cette fois-ci nous voyons que l’index est utilisé : c’est la solution la moins coûteuse. L’estimation des lignes à retourner, basée sur les statistiques de distribution,
donne 5,28571 lignes. Nous verrons plus loin d’où SQL Server tire cette approximation.
6.4.2 Colonnes non indexées
Les statistiques ne sont pas uniquement utiles pour les index. L’optimiseur peut
profiter de la présence de statistiques même sur des colonnes qui ne font pas partie de
la clé d’un index. Cela lui permettra d’évaluer le nombre de lignes retournées dans
une requête qui filtre sur les valeurs de cette colonne, et donc de choisir un bon plan
d’exécution. Par exemple, si la colonne participe à un JOIN, cela permettra à l’optimiseur de choisir le type de jointure le plus adapté.
En SQL Server 2000, comme les statistiques de colonne sont stockées dans la
table système sysindexes avec la définition des index, la création de statistiques
avait comme conséquence de diminuer le nombre possible d’index pouvant être
créés sur la table.
Vous étiez limités à 249 index nonclustered par table, donc à 249 index plus statistiques.
Sur des tables contenant beaucoup de colonnes, la création automatique des statistiques pouvait vous faire atteindre cette limite. Il vous fallait alors supprimer des
statistiques (avec la commande DROP STATISTICS) pour permettre la création de nouveaux index.
Dans SQL Server 2005, la limite du nombre de statistiques de colonne sur une
table a été augmentée à 2000, plus 249 statistiques d’index, poussant le nombre de
statistiques possibles sur une table à 2249.
