CREATE STATISTICS (Transact-SQL)

Crée un histogramme et les groupes de densité associés (collections) pour la colonne ou l'ensemble de colonnes fournies tiré d'une table ou d'une vue indexée. Les statistiques sous forme de chaînes reprenant les données sommaires sont également créées d'après les statistiques générées s'appuyant sur des colonnes de type char, varchar, varchar(max), nchar, nvarchar, nvarchar(max), text et ntext. L'optimiseur de requête utilise ces informations statistiques pour choisir le plan le plus efficace pour la récupération ou la mise à jour de données. Avec des statistiques à jour, l'optimiseur peut évaluer correctement le coût de différents plans de requête et choisir un plan de haute qualité. Pour plus d'informations sur les statistiques dans SQL Server 2005, consultez « Statistiques utilisées par l'optimiseur de requête dans Microsoft SQL Server 2005 » sur Microsoft TechNet.

Icône Lien de rubriqueConventions de syntaxe de Transact-SQL

Syntaxe

CREATE STATISTICS statistics_name 
ON { table | view } ( column [ ,...n ] ) 
    [ WITH 
        [ [ FULLSCAN 
          | SAMPLE number { PERCENT | ROWS } 
          | STATS_STREAM = stats_stream ] [ , ] ] 
        [ NORECOMPUTE ] 
    ] ;

Arguments

  • statistics_name
    Nom du groupe de statistiques à créer. Le nom des statistiques doit respecter les règles applicables aux identificateurs et doit être unique dans toute la table ou la vue à l'origine de leur création.
  • table
    Nom de la table pour laquelle il faut créer les statistiques nommées. Le nom des tables doit respecter les règles applicables aux identificateurs. table correspond à la table à laquelle est associée la colonne column. Vous n'êtes pas tenu de spécifier le nom du propriétaire de la table. Vous pouvez créer les statistiques sur des tables tirées d'une autre base de données en spécifiant un nom de table qualifié.
  • view
    Nom de la vue pour laquelle il faut créer les statistiques nommées. Des statistiques ne peuvent être créées pour une vue que si celle-ci possède un index cluster. Le nom des tables doit respecter les règles applicables aux identificateurs. view correspond à la vue à laquelle est associée la colonne column. Vous n'êtes pas tenu de spécifier le nom du propriétaire de la vue. Vous pouvez créer les statistiques sur des vues tirées d'une autre base de données en spécifiant un nom de vue qualifié.
  • column
    Colonne ou ensemble de colonnes pour lesquelles il faut créer des statistiques. Toute colonne pouvant être spécifiée en tant que clé d'index peut également être indiquée comme une des bases du calcul des statistiques, à l'exception :

    • des colonnes de type xml ;
    • des colonnes combinées dont la taille maximale autorisée des valeurs ne peut pas dépasser la limite des 900 octets imposée à la valeur de la clé d'index.

    Les colonnes calculées ne peuvent être indiquées que si les options de base de données ARITHABORT et QUOTED_IDENTIFIER sont activées (ON). Toute colonne de type CLR définie par l'utilisateur peut être spécifiée si son type prend en charge l'ordre de tri binaire. Les colonnes calculées définies en tant qu'appels à des méthodes et tirées de colonnes de type personnalisé (défini par l'utilisateur) peuvent être précisées si les méthodes en question sont marquées comme étant déterministes. Pour plus d'informations sur la création de colonnes de type CLR défini par l'utilisateur, consultez Utilisation de types CLR définis par l'utilisateur.

  • FULLSCAN
    Spécifie que toutes les lignes de la table (table) ou de la vue (view) doivent être lues pour rassembler les statistiques. Si vous spécifiez FULLSCAN, le système aura le même comportement que si vous spécifiez SAMPLE 100 PERCENT. Cette option ne peut pas être utilisée avec l'option SAMPLE.
  • SAMPLE number { PERCENT | ROWS }
    Spécifie que la lecture d'un pourcentage ou d'un nombre spécifié de lignes de données doit être fait par échantillonnage aléatoire pour rassembler les statistiques. number ne peut être qu'un entier. Si PERCENT est spécifié, number doit être compris entre 0 et 100 ; Si ROWS est spécifié, number peut être compris entre 0 et le nombre total de lignes n.

    Pour garantir l'utilité des statistiques, le moteur de base de données SQL Server 2005 assure l'échantillonnage d'un nombre minimal de valeurs. Si les résultats de l'option PERCENT, ROWS ou number aboutissent à l'échantillonnage d'un nombre de lignes insuffisant, le moteur de base de données corrige automatiquement l'échantillon en fonction du nombre de lignes présentes dans la table ou la vue. Environ 1 000 pages de données sont échantillonnées. Si les résultats de l'option PERCENT, ROWS ou number aboutissent au contraire à l'échantillonnage d'un nombre de lignes trop important, le moteur de base de données essaie de calquer le résultat sur les critères choisis pour obtenir le volume d'échantillon demandé. Cependant, puisque les échantillons sont obtenus en analysant entièrement les pages de données, il se peut que la taille de l'échantillon final ne corresponde pas exactement au volume précisé. Si PERCENT ou ROWS est défini sur 0, le résultat revient alors à un ensemble de statistiques vide.

    SAMPLE ne peut pas être utilisé avec l'option FULLSCAN. Si vous n'indiquez pas l'option SAMPLE ou FULLSCAN, le moteur de base de données calcule les statistiques d'après un échantillon choisi automatiquement.

  • NORECOMPUTE
    Spécifie que le moteur de base de données ne doit pas recalculer automatiquement les statistiques. Si cette option est spécifiée, le moteur de base de données continue à utiliser les statistiques créées précédemment (les anciennes), même si les données sont modifiées. Les statistiques ne sont en effet pas mises à jour ni maintenues automatiquement par le moteur de base de données. Les plans produits risquent de ne pas être ainsi optimisés.

    ms188038.Caution(fr-fr,SQL.90).gifAttention :
    Nous vous recommandons d'utiliser cette option de façon limitée et uniquement par un administrateur système qualifié.
  • STATS_STREAM **=**stats_stream
    La syntaxe est à but interne uniquement et n'est pas prise en charge. Microsoft se réserve le droit de modifier cette syntaxe à tout moment.

Notes

Seul le propriétaire de la table peut créer des statistiques sur cette table. Le propriétaire d'une table peut créer un groupe de statistiques (collection) à n'importe quel moment, qu'il y ait ou non des données dans la table.

Si l'option de base de données AUTO_UPDATE_STATISTICS est définie sur ON (correspondant au paramètre par défaut) et si la clause NORECOMPUTE n'est pas précisée, le moteur de base de données met à jour automatiquement les statistiques créées manuellement.

CREATE STATISTICS peut être exécuté sur des vues indexées. Les statistiques définies sur une vue indexée sont utilisées par l'optimiseur uniquement si la requête fait directement référence à la vue et que l'indicateur NOEXPAND est spécifié pour celle-ci. Sinon, les statistiques proviennent des tables sous-jacentes avant la substitution de la vue indexée dans le plan de requête. Cette substitution est prise en charge uniquement sous Microsoft SQL Server 2005, Éditions Entreprise et Développeur.

Autorisations

Nécessite l'autorisation ALTER sur la table ou la vue.

Exemples

A. Utilisation de CREATE STATISTICS avec SAMPLE number PERCENT

L'exemple suivant illustre la création du groupe de statistiques (collection) intitulé ContactMail1. Des statistiques d'échantillonnage aléatoires sont calculées sur 5 % parmi les valeurs des colonnes ContactID et EmailAddress provenant de la table Contact de la base de données AdventureWorks.

USE AdventureWorks;
GO
CREATE STATISTICS ContactMail1
    ON Person.Contact (ContactID, EmailAddress)
    WITH SAMPLE 5 PERCENT;

B. Utilisation de CREATE STATISTICS avec FULLSCAN et NORECOMPUTE

L'exemple suivant illustre la création du groupe de statistiques (collection) intitulé ContactMail2. Les statistiques sont calculées d'après toutes les lignes des colonnes ContactID et EmailAddress de la table Contact et désactive par là même le recalcul automatique des statistiques.

CREATE STATISTICS NamePurchase
    ON AdventureWorks.Person.Contact (ContactID, EmailAddress)
    WITH FULLSCAN, NORECOMPUTE;

Voir aussi

Référence

ALTER DATABASE (Transact-SQL)
CREATE INDEX (Transact-SQL)
DBCC SHOW_STATISTICS (Transact-SQL)
DROP STATISTICS (Transact-SQL)
sys.stats (Transact-SQL)
sys.stats_columns (Transact-SQL)
sp_autostats (Transact-SQL)
sp_createstats (Transact-SQL)
UPDATE STATISTICS (Transact-SQL)
EVENTDATA (Transact-SQL)

Aide et Informations

Assistance sur SQL Server 2005