DBCC SHOW_STATISTICS (Transact-SQL)

DBCC SHOW_STATISTICS affiche les statistiques d'optimisation de la requête actuelle pour une table ou une vue indexée. L'optimiseur de requête utilise des statistiques pour estimer le nombre de lignes, également appelé cardinalité, dans le résultat de la requête, ce qui lui permet de créer un plan de requête de haute qualité. Par exemple, l'optimiseur de requête pourrait utiliser des estimations de cardinalité afin de choisir l'opérateur de recherche d'index plutôt que l'opérateur d'analyse d'index dans le plan de requête. Cela permettrait d'améliorer les performances des requêtes car le recours à une analyse d'index monopolisant de nombreuses ressources serait ainsi évité.

L'optimiseur de requête stocke des statistiques pour une table ou vue indexée dans un objet des statistiques. Pour une table, l'objet des statistiques est créé sur un index ou sur une liste de colonnes de table. L'objet des statistiques inclut un en-tête contenant des métadonnées sur les statistiques, un histogramme indiquant la distribution des valeurs dans la première colonne clé de l'objet des statistiques, et un vecteur de densité destiné à mesurer la corrélation entre les colonnes. Le moteur de base de données peut calculer des estimations de cardinalité avec n'importe laquelle des données de l'objet des statistiques.

DBCC SHOW_STATISTICS affiche l'en-tête, l'histogramme et le vecteur de densité en fonction des données stockées dans l'objet des statistiques. La syntaxe vous permet de spécifier une table ou une vue indexée ainsi qu’un nom d'index cible, un nom de statistique ou un nom de colonne. Cette rubrique explique comment afficher les statistiques et comment comprendre les résultats affichés.

Pour plus d'informations, consultez Statistiques.

Icône Lien de rubrique Conventions de la syntaxe Transact-SQL

Syntaxe

DBCC SHOW_STATISTICS ( table_or_indexed_view_name , target ) 
[ WITH [ NO_INFOMSGS ] < option > [ , n ] ]
< option > :: =
    STAT_HEADER | DENSITY_VECTOR | HISTOGRAM | STATS_STREAM

Arguments

  • table_or_indexed_view_name
    Nom de la table ou de la vue indexée dont les informations statistiques doivent être affichées.

  • target
    Nom de l'index, de la statistique ou de la colonne dont les informations statistiques doivent être affichées. Si target est le nom d'une statistique ou d'un index existant dans une table ou une vue indexée, les informations statistiques concernant cette cible sont retournées. Si target est le nom d'une colonne existante et que celle-ci contient une statistique créée automatiquement, les informations sur cette dernière sont retournées. S'il n'existe pas de statistique créée automatiquement pour une cible de colonne, le message d'erreur 2767 est retourné.

  • NO_INFOMSGS
    Supprime tous les messages d'information dont les niveaux de gravité sont compris entre 0 et 10.

  • STAT_HEADER | DENSITY_VECTOR | HISTOGRAM | STATS_STREAM [ **,**n ]
    La spécification d'une ou de plusieurs de ces options limite les jeux de résultats retournés par l'instruction aux options spécifiées. Si aucune option n'est spécifiée, toutes les informations statistiques sont retournées.

    STATS_STREAM est Identifié à titre d'information uniquement. Non pris en charge. La compatibilité future n'est pas garantie.

Jeux de résultats

Le tableau suivant décrit les colonnes retournées dans le jeu de résultats lorsque STAT_HEADER est spécifié.

Nom de la colonne

Description

Name

Nom de l'objet de statistiques.

Updated

Date et heure de la dernière mise à jour des statistiques. La fonction STATS_DATE offre une autre manière de récupérer ces informations.

Rows

Nombre total de lignes dans la table ou la vue indexée au moment de la dernière mise à jour des statistiques. Si les statistiques sont filtrées ou correspondent à un index filtré, le nombre de lignes peut être inférieur à celui de la table. Pour plus d'informations, consultez Statistiques.

Rows Sampled

Nombre total de lignes échantillonnées pour le calcul des statistiques. Si Rows Sampled < Rows, l'histogramme et les résultats de densité affichés sont des estimations basées sur les lignes échantillonnées.

Steps

Nombre d'étapes dans l'histogramme. Chaque étape couvre une plage de valeurs de colonnes suivie d'une valeur de colonne de limite supérieure. Les étapes d'histogramme sont définies sur la première colonne clé des statistiques. Le nombre maximal d'étapes est 200.

Density

La formule 1 / distinct values est utilisée pour toutes les valeurs de la première colonne clé de l'objet de statistiques, à l'exception des valeurs limites de l'histogramme. Cette valeur Density n'est pas utilisée par l'optimiseur de requête ; elle est affichée pour la compatibilité descendante avec les versions antérieures à SQL Server 2008.

Average Key Length

Nombre moyen d'octets par valeur pour toutes les colonnes clés de l'objet de statistiques.

String Index

La valeur Yes indique que l'objet de statistiques contient des statistiques de résumé de chaîne pour améliorer les estimations de cardinalité des prédicats de requête qui utilisent l'opérateur LIKE ; c'est le cas par exemple de WHERE ProductName LIKE '%Bike'. Les statistiques de résumé de chaîne sont stockées à l'écart de l'histogramme et sont créées sur la première colonne clé de l'objet de statistiques lorsqu'il est de type char, varchar, nchar, nvarchar, varchar(max), nvarchar(max), text ou ntext.

Filter Expression

Prédicat pour le sous-ensemble des lignes de table incluses dans l'objet de statistiques. NULL = statistiques non filtrées. Pour plus d'informations sur les prédicats filtrés, consultez Créer des index filtrés. Pour plus d'informations sur les statistiques filtrées, consultez Statistiques.

Unfiltered Rows

Nombre total de lignes dans la table avant l'application de l'expression de filtre. Si Filter Expression est NULL, Unfiltered Rows est égal à Rows.

Le tableau suivant décrit les colonnes retournées dans le jeu de résultats lorsque DENSITY_VECTOR est spécifié.

Nom de colonne

Description

All Density

La densité est calculée selon la formule 1 / distinct values. Les résultats affichent la densité pour chaque préfixe des colonnes de l'objet de statistiques, à raison d'une ligne par densité. Une valeur distincte est une liste distincte des valeurs de colonnes par ligne et par préfixe de colonne. Par exemple, si l'objet de statistiques contient des colonnes clés (A, B, C), les résultats affichent la densité des listes distinctes de valeurs dans chacun des préfixes de colonnes suivants : (A), (A,B) et (A, B, C). Avec le préfixe (A, B, C), chacune des listes suivantes est une liste de valeurs distincte : (3, 5, 6), (4, 4, 6), (4, 5, 6), (4, 5, 7). Avec le préfixe (A, B), les listes de valeurs distinctes suivantes sont associées aux mêmes valeurs de colonnes : (3, 5), (4, 4) et (4, 5)

Average Length

Longueur moyenne, en octets, pour le stockage d'une liste des valeurs de colonnes pour le préfixe de colonne. Par exemple, si les valeurs dans la liste (3, 5, 6) nécessitent 4 octets chacune, la longueur est égale à 12 octets.

Columns

Noms de colonnes dans le préfixe pour lequel All density et Average length sont affichés.

Le tableau suivant décrit les colonnes retournées dans le jeu de résultats lorsque l'option HISTOGRAM est spécifiée.

Nom de la colonne

Description

RANGE_HI_KEY

Valeur de colonne de limite supérieure pour une étape d'histogramme. La valeur de colonne est également appelée « valeur de clé ».

RANGE_ROWS

Nombre estimé de lignes dont la valeur de colonne est comprise dans une étape d'histogramme, à l'exception de la limite supérieure.

EQ_ROWS

Nombre estimé de lignes dont la valeur de colonne est égale à la limite supérieure de l'étape d'histogramme.

DISTINCT_RANGE_ROWS

Nombre estimé de lignes ayant une valeur de colonne distincte dans une étape d'histogramme, à l'exception de la limite supérieure.

AVG_RANGE_ROWS

Nombre moyen de lignes ayant des valeurs de colonnes dupliquées dans une étape d'histogramme, à l'exception de la limite supérieure (RANGE_ROWS / DISTINCT_RANGE_ROWS pour DISTINCT_RANGE_ROWS > 0).

Notes

Histogramme

Un histogramme mesure la fréquence des occurrences de chaque valeur distincte dans un jeu de données. L'optimiseur de requête calcule un histogramme sur les valeurs de colonnes de la première colonne clé de l'objet de statistiques, en sélectionnant les valeurs de colonnes au moyen d'un échantillonnage statistique des lignes ou d'une analyse complète de toutes les lignes dans la table ou la vue. Si l'histogramme est créé à partir d'un jeu de lignes échantillonnées, les totaux stockés pour le nombre de lignes et le nombre de valeurs distinctes sont des estimations et ne doivent pas nécessairement être des nombres entiers.

Pour créer l'histogramme, l'optimiseur de requête trie les valeurs de colonnes, calcule le nombre de valeurs qui correspondent à chaque valeur de colonne distincte, puis regroupe les valeurs de colonnes dans 200 étapes d'histogramme contiguës au maximum. Chaque étape inclut une plage de valeurs de colonnes suivie d'une valeur de colonne de limite supérieure. La plage comprend toutes les valeurs de colonnes possibles entre des valeurs limites, à l'exception des valeurs limites elles-mêmes. La plus basse des valeurs de colonnes triées est la valeur de limite supérieure pour la première étape d'histogramme.

Le diagramme suivant illustre un histogramme avec six étapes : La zone située à gauche de la première valeur limite supérieure représente la première étape.

a0ce6714-01f4-4943-a083-8cbd2d6f617a

Pour chaque étape d'histogramme :

  • La ligne en gras représente la valeur limite supérieure (RANGE_HI_KEY) et le nombre d'occurrences (EQ_ROWS) correspondant.

  • La zone pleine située à gauche de RANGE_HI_KEY représente la plage de valeurs de colonnes et le nombre moyen d'occurrences de chacune des valeurs de colonnes (AVG_RANGE_ROWS). La valeur AVG_RANGE_ROWS pour la première étape d'histogramme est toujours 0.

  • Les lignes pointillées représentent les valeurs échantillonnées utilisées pour estimer le nombre total de valeurs distinctes dans la plage (DISTINCT_RANGE_ROWS) et le nombre total de valeurs dans la plage (RANGE_ROWS). L'optimiseur de requête utilise les valeurs RANGE_ROWS et DISTINCT_RANGE_ROWS pour calculer la valeur AVG_RANGE_ROWS ; il ne stocke pas les valeurs échantillonnées.

L'optimiseur de requête définit les étapes d'histogramme en fonction de leur importance statistique. Il utilise un algorithme de nombre maximal de différences pour réduire le nombre d'étapes dans l'histogramme tout en augmentant la différence entre les valeurs limites. Le nombre maximal d'étapes est 200. Le nombre d'étapes d'histogramme peut être inférieur au nombre de valeurs distinctes, même pour les colonnes comportant moins de 200 points de limite. Par exemple, une colonne avec 100 valeurs distinctes peut avoir un histogramme comportant moins de 100 points de limite.

Vecteur de densité

L'optimiseur de requête utilise des densités afin d'améliorer les estimations de cardinalité pour les requêtes qui retournent plusieurs colonnes à partir de la même table ou vue indexée. Le vecteur de densité contient une densité pour chaque préfixe des colonnes dans l'objet de statistiques. Par exemple, si un objet de statistiques contient les colonnes clés CustomerId, ItemId, Price, la densité est calculée sur chacun des préfixes de colonnes suivants :

Préfixe de colonne

Densité calculée sur

(CustomerId)

Lignes avec des valeurs correspondantes pour CustomerId

(CustomerId, ItemId)

Lignes avec des valeurs correspondantes pour CustomerId et ItemId

(CustomerId, ItemId, Price)

Lignes avec des valeurs correspondantes pour CustomerId, ItemId et Price

Restrictions

DBCC SHOW_STATISTICS ne fournit pas de statistiques pour les index spatiaux ou columnstore optimisés en mémoire xVelocity.

Autorisations

Pour afficher l'objet de statistiques, l'utilisateur doit posséder la table ou être membre du rôle serveur fixe sysadmin, du rôle de base de données fixe db_owner ou du rôle de base de données fixe db_ddladmin.

SQL Server 2012 SP1 modifie les limites liées aux autorisations et permet aux utilisateurs avec l'autorisation SELECT d'utiliser cette commande. Remarquez que les conditions suivantes doivent être remplies pour que les autorisations SELECT permettent d'exécuter la commande :

  • Les utilisateurs doivent posséder des autorisations sur toutes les colonnes dans l'objet de statistiques.

  • Les utilisateurs doivent posséder une autorisation sur toutes les colonnes dans une condition de filtre (le cas échéant).

Pour désactiver ce comportement, utilisez traceflag 9485.

Exemples

A.Retour de toutes les informations statistiques

L'exemple suivant affiche toutes les informations statistiques relatives à l'index AK_Product_Name de la table Person.Address .

USE AdventureWorks2012;
GO
DBCC SHOW_STATISTICS ("Person.Address", AK_Address_rowguid);
GO

B.Utilisation de l'option HISTOGRAM

L'exemple suivant limite les informations statistiques affichées pour l'index AK_Product_Name aux données HISTOGRAM.

USE AdventureWorks2012;
GO
DBCC SHOW_STATISTICS ("Person.Address", AK_Address_rowguid) WITH HISTOGRAM;
GO

Voir aussi

Référence

CREATE INDEX (Transact-SQL)

CREATE STATISTICS (Transact-SQL)

DROP STATISTICS (Transact-SQL)

sp_autostats (Transact-SQL)

sp_createstats (Transact-SQL)

STATS_DATE (Transact-SQL)

UPDATE STATISTICS (Transact-SQL)

Concepts

Statistiques