UPDATE STATISTICS (Transact-SQL)

Mis à jour : 12 décembre 2006

Met à jour les informations sur la distribution des valeurs de clé pour un ou plusieurs groupes de statistiques (collections) dans la table ou la vue indexée spécifiées. Pour créer des statistiques sur des colonnes, consultez CREATE STATISTICS (Transact-SQL).

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

Syntaxe

UPDATE STATISTICS table | view 
    [ 
        { 
            { index | statistics_name }
          | ( { index |statistics_name } [ ,...n ] ) 
                }
    ] 
    [    WITH 
        [ 
            [ FULLSCAN ] 
            | SAMPLE number { PERCENT | ROWS } ] 
            | RESAMPLE 
            | <update_stats_stream_option> [ ,...n ]
        ] 
        [ [ , ] [ ALL | COLUMNS | INDEX ] 
        [ [ , ] NORECOMPUTE ] 
    ] ;

<update_stats_stream_option> ::=
    [ STATS_STREAM = stats_stream ]
    [ ROWCOUNT = numeric_constant ]
    [ PAGECOUNT = numeric contant ]

Arguments

  • table | view
    Nom de la table ou de la vue indexée dont les statistiques doivent être mises à jour. Les noms de tables ou de vues doivent respecter les conventions applicables aux identificateurs. Pour plus d'informations, consultez Utilisation des identificateurs comme noms d'objet. Les noms d'index n'étant pas uniques à l'intérieur de chaque base de données, l'argument table ou view doit être spécifié. Vous pouvez éventuellement spécifier les noms du schéma de la vue, de la table ou de la base de données.
  • index
    Index dont les statistiques sont mises à jour. Les noms d'index doivent respecter les conventions applicables aux identificateurs. Si la valeur de index n'est pas spécifiée, toutes les statistiques de distribution de la vue indexée ou de la table indiquée sont mises à jour. Il s'agit des statistiques créées à l'aide de l'instruction CREATE STATISTICS, des statistiques créées automatiquement et des statistiques créées comme effet secondaire d'une création d'index.

    Pour afficher un rapport sur les index d'un objet, exécutez sp_helpindex et spécifiez le nom de la table ou vue.

  • statistics_name
    Nom du groupe de statistiques (collection) à mettre à jour. Les noms de statistiques doivent respecter les conventions applicables aux identificateurs. Pour plus d'informations sur la création de groupes de statistiques, consultez CREATE STATISTICS (Transact-SQL).
  • FULLSCAN
    Indique que toutes les lignes de table ou de 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 le pourcentage de la table ou de la vue indexée, ou le nombre de lignes à échantillonner lors de la collecte des statistiques de tables ou vues volumineuses. number doit être un entier, qu'il s'agisse d'un pourcentage (PERCENT) ou de lignes (ROWS). Pour utiliser le comportement d'échantillonnage par défaut avec des tables ou vues volumineuses, utilisez SAMPLE number avec PERCENT ou ROWS. 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. Approximativement, au moins 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é. Toutefois, les échantillons étant le fruit de l'analyse de toutes les pages de données, leur taille réelle peut différer quelque peu de la quantité spécifiée. Si vous attribuez la valeur 0 à PERCENT ou ROWS, vous obtenez un jeu de statistiques vide.

    ms187348.note(fr-fr,SQL.90).gifRemarque :
    Le comportement par défaut est de réaliser une analyse d'échantillons sur la table ou la vue indexée cible. Le moteur de base de données calcule automatiquement la taille d'échantillon requise.
  • RESAMPLE
    Spécifie que les statistiques seront collectées à l'aide d'un taux d'échantillonnage hérité pour toutes les statistiques existantes comprenant des index. Si le taux d'échantillonnage crée 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.
  • ALL | COLUMNS | INDEX
    Indique si l'instruction UPDATE STATISTICS affecte les statistiques de colonnes ou les statistiques d'index, ou toutes les statistiques existantes. Si aucune option n'est spécifiée, l'instruction UPDATE STATISTICS affecte toutes les statistiques. Il ne peut y avoir qu'un seul type (ALL, COLUMNS ou INDEX) par instruction UPDATE STATISTICS.
  • NORECOMPUTE
    Spécifie que les statistiques périmées ne sont pas recalculées automatiquement. Les statistiques deviennent obsolètes en fonction du nombre d'opérations INSERT, UPDATE et DELETE effectuées sur les colonnes indexées. Lorsqu'elle est spécifiée, cette option provoque la désactivation de la reconstruction automatique des statistiques par le moteur de base de données. Pour restaurer la reconstruction automatique des statistiques, exécutez UPDATE STATISTICS sans l'option NORECOMPUTE ou exécutez sp_autostats.

    ms187348.note(fr-fr,SQL.90).gifImportant :
    Lorsque la reconstruction automatique des statistiques est désactivée, l'optimiseur de requête peut choisir une stratégie moins performante pour traiter les requêtes impliquant la table spécifiée.
  • <update_stats_stream_option>
    Indiqué à titre d'information uniquement. Non pris en charge. La compatibilité future n'est pas garantie.

Notes

Le moteur de base de données conserve les statistiques de distribution des valeurs de clé dans chaque index, et utilise ces statistiques pour déterminer les index à utiliser dans le traitement des requêtes. Les utilisateurs peuvent créer des statistiques sur les colonnes non indexées à l'aide de l'instruction CREATE STATISTICS. L'optimisation de vos requêtes dépend de la précision des étapes de distribution :

  • Si d'importantes modifications sont apportées aux valeurs de clé de l'index, exécutez à nouveau UPDATE STATISTICS sur cet index.
  • Si de nombreuses données d'une colonne indexée ont été ajoutées, modifiées ou supprimées (autrement dit, si vous pensez que la distribution des valeurs de clé a changé) ou si la table a été tronquée à l'aide de l'instruction TRUNCATE TABLE puis rechargée, faites appel à l'instruction UPDATE STATISTICS.

Pour afficher la date de la dernière mise à jour des statistiques, utilisez la fonction STATS_DATE.

UPDATE STATISTICS WITH RESAMPLE met à jour toutes les statistiques sur une table au taux d'échantillonnage actuel. Cela signifie que les statistiques liées aux index, créées avec une analyse complète pendant la construction de ceux-ci, requiert l'actualisation de l'ensemble de l'analyse de la table. Cette opération peut prendre beaucoup de temps, notamment si elle implique des tables partitionnées volumineuses dotées de nombreux index. L'actualisation de chaque statistique requiert la lecture d'une quantité volumineuse de données. Pour éviter ce problème, pensez à utiliser sp_updatestats (Transact-SQL). Cette procédure stockée met à jour les statistiques uniquement lorsqu'elles sont nécessaires.

Il est possible de créer ou de mettre à jour des statistiques sur des tables contenant des colonnes calculées uniquement si les conditions de la création d'un index sur ces colonnes sont réunies. Pour plus d'informations sur les conditions requises et les restrictions qui s'appliquent à la création d'index sur des colonnes calculées, consultez CREATE INDEX (Transact-SQL).

Si vous désactivez le recalcul automatique des statistiques, vous devez mettre à jour celles-ci manuellement.

ms187348.note(fr-fr,SQL.90).gifRemarque :
L'instruction UPDATE STATISTICS réactive la mise à jour automatique des statistiques sur la table ou la vue cible sauf si la clause NORECOMPUTE est spécifiée.

Autorisations

Requiert une autorisation ALTER sur la table ou vue.

Exemples

A. Mise à jour de toutes les statistiques d'une seule table

L'exemple suivant met à jour les statistiques de distribution de tous les index de la table SalesOrderDetail.

USE AdventureWorks;
GO
UPDATE STATISTICS Sales.SalesOrderDetail;
GO

B. Mise à jour des statistiques d'un seul index

L'exemple suivant illustre la mise à jour des informations de distribution pour l'index AK_SalesOrderDetail_rowguid de la table SalesOrderDetail.

USE AdventureWorks;
GO
UPDATE STATISTICS Sales.SalesOrderDetail AK_SalesOrderDetail_rowguid;
GO

C. Mise à jour des statistiques de groupes de statistiques spécifiques (collections) avec un échantillonnage de 50 pour cent

L'exemple suivant crée puis met à jour le groupe de statistiques des colonnes Name et ProductNumber de la table Product.

USE AdventureWorks;
GO
CREATE STATISTICS Products
    ON Production.Product ([Name], ProductNumber)
    WITH SAMPLE 50 PERCENT
-- Time passes. The UPDATE STATISTICS statement is then executed.
UPDATE STATISTICS Production.Product(Products) 
    WITH SAMPLE 50 PERCENT;

D. Mise à jour des statistiques de groupes de statistiques spécifiques (collections) avec FULLSCAN et NORECOMPUTE

L'exemple suivant met à jour le groupe de statistiques (collection) Products dans la table Product, force l'analyse complète de toutes les lignes de la table Product, et désactive la mise à jour automatique des statistiques pour ce groupe de statistiques (collection).

USE AdventureWorks;
GO
UPDATE STATISTICS Production.Product(Products)
    WITH FULLSCAN, NORECOMPUTE;
GO

Voir aussi

Référence

ALTER DATABASE (Transact-SQL)
CREATE INDEX (Transact-SQL)
CREATE STATISTICS (Transact-SQL)
sys.stats (Transact-SQL)
sys.stats_columns (Transact-SQL)
Curseurs (Transact-SQL)
DBCC SHOW_STATISTICS (Transact-SQL)
DROP STATISTICS (Transact-SQL)
EXECUTE (Transact-SQL)
EVENTDATA (Transact-SQL)
sp_autostats (Transact-SQL)
sp_createstats (Transact-SQL)
sp_helpindex (Transact-SQL)
sp_updatestats (Transact-SQL)
STATS_DATE (Transact-SQL)

Autres ressources

Fonctions (moteur de base de données)

Aide et Informations

Assistance sur SQL Server 2005

Historique des modifications

Version Historique

12 décembre 2006

Contenu modifié :
  • Suppression des Notes de l'instruction « UPDATE STATISTICS n'est pas autorisée dans une transaction explicite ou implicite ». Cette restriction ne s'applique pas à SQL Server 2005.