UPDATE STATISTICS (Transact-SQL)

Met à jour les statistiques d'optimisation de requête d'une table ou d'une vue indexée. Par défaut, l'optimiseur de requête met à jour les statistiques en fonction des besoins afin d'améliorer le plan de requête ; dans certains cas, vous pouvez optimiser les performances des requêtes en utilisant UPDATE STATISTICS ou la procédure stockée sp_updatestats pour mettre à jour les statistiques de manière plus fréquente qu'avec les mises à jour par défaut.

La mise à jour des statistiques est l'assurance que les requêtes sont compilées avec des statistiques à jour. Toutefois, la mise à jour des statistiques entraîne une recompilation des requêtes. À ce titre, il est déconseillé de mettre à jour les statistiques de façon trop régulière eu égard aux performances. Un compromis doit être trouvé entre le souhait d'améliorer les plans de requête et le temps nécessaire à la recompilation des requêtes. Ce compromis peut varier en fonction de votre application. UPDATE STATISTICS peut utiliser tempdb pour trier l'exemple de lignes pour la génération de statistiques.

Pour plus d'informations sur les statistiques, notamment sur le moment où UPDATE STATISTICS doit être utilisé, consultez Utilisation des statistiques pour améliorer les performances des requêtes.

Icône Lien de rubriqueConventions de syntaxe Transact-SQL

Syntaxe

UPDATE STATISTICS table_or_indexed_view_name 
    [ 
        { 
            { index_or_statistics__name }
          | ( { index_or_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_or_indexed_view_name
    Nom de la table ou vue indexée dont les statistiques doivent être mises à jour.

  • index_or_statistics_name
    Nom de l'index dont les statistiques doivent être mises à jour ou nom des statistiques à mettre à jour. Si index_or_statistics_name n'est pas spécifié, l'optimiseur de requête met à jour toutes les statistiques pour la table ou vue indexée. Cela inclut les statistiques créées à l'aide de l'instruction CREATE STATISTICS, les statistiques de colonnes uniques créées lorsque AUTO_CREATE_STATISTICS a la valeur ON, ainsi que les statistiques créées pour les index.

    Pour plus d'informations sur AUTO_CREATE_STATISTICS, consultez Options SET de ALTER DATABASE (Transact-SQL). Pour afficher tous les index d'une table ou d'une vue, vous pouvez utiliser sp_helpindex.

  • FULLSCAN
    Calcule les statistiques en analysant toutes les lignes dans la table ou vue indexée. FULLSCAN et SAMPLE 100 PERCENT ont les mêmes résultats. Cette option ne peut pas être utilisée avec l'option SAMPLE.

  • SAMPLE number { PERCENT | ROWS }
    Spécifie le pourcentage ou nombre de lignes approximatif dans la table ou vue indexée à utiliser par l'optimiseur de requête lors de la mise à jour des statistiques. Pour PERCENT, number peut être compris entre 0 et 100 et pour ROWS, number peut être compris entre 0 et le nombre total de lignes. Le pourcentage ou nombre de lignes réel échantillonné par l'optimiseur de requête peut ne pas correspondre au pourcentage ou nombre spécifié. Par exemple, l'optimiseur de requête analyse toutes les lignes d'une page de données.

    SAMPLE est utile pour les cas spéciaux dans lesquels le plan de requête, basé sur l'échantillonnage par défaut, n'est pas optimal. Dans la plupart des situations, il n'est pas nécessaire de spécifier SAMPLE car l'optimiseur de requête utilise l'échantillonnage et détermine la taille d'échantillon statistiquement significative par défaut, comme requis pour créer des plans de requête de haute qualité.

    SAMPLE ne peut pas être utilisé avec l'option FULLSCAN. Lorsque ni SAMPLE ni FULLSCAN n'est spécifié, l'optimiseur de requête utilise les données échantillonnées et calcule la taille d'échantillon par défaut.

    Il est déconseillé de spécifier 0 PERCENT ou 0 ROWS. Lorsque 0 PERCENT ou ROWS est spécifié, l'objet de statistiques est mis à jour mais ne contient pas de données de statistiques.

  • RESAMPLE
    Met à jour chaque statistique à l'aide de son taux d'échantillonnage le plus récent.

    L'utilisation de RESAMPLE peut entraîner une analyse complète de la table. Par exemple, les statistiques relatives aux index utilisent une analyse de table complète pour leur taux d'échantillonnage. Si aucune option d'échantillonnage (SAMPLE, FULLSCAN, RESAMPLE) n'est spécifiée, l'optimiseur de requête échantillonne les données et calcule la taille d'échantillon par défaut.

  • ALL | COLUMNS | INDEX
    Met à jour toutes les statistiques existantes, les statistiques créées sur une ou plusieurs colonnes, ou les statistiques créées pour les index. Si aucune option n'est spécifiée, l'instruction UPDATE STATISTICS met à jour toutes les statistiques de la table ou vue indexée.

  • NORECOMPUTE
    Désactive l'option de mise à jour automatique des statistiques, AUTO_UPDATE_STATISTICS, pour les statistiques spécifiées. Si cette option est spécifiée, l'optimiseur de requête effectue cette mise à jour des statistiques et désactive les mises à jour ultérieures.

    Pour réactiver le comportement de l'option AUTO_UPDATE_STATISTICS, réexécutez UPDATE STATISTICS sans l'option NORECOMPUTE ou exécutez sp_autostats.

    AttentionAttention

    L'utilisation de cette option peut produire des plans de requêtes non optimaux. Nous recommandons d'utiliser cette option avec parcimonie et uniquement par un administrateur système qualifié.

    Pour plus d'informations sur l'option AUTO_UPDATE_STATISTICS, consultez Options SET de ALTER DATABASE (Transact-SQL). Pour plus d'informations sur la désactivation et la réactivation des mises à jour des statistiques, consultez Utilisation des statistiques pour améliorer les performances des requêtes.

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

Notes

Quand utiliser UPDATE STATISTICS

Pour plus d'informations sur le moment où UPDATE STATISTICS doit être utilisé, consultez Utilisation des statistiques pour améliorer les performances des requêtes.

Mise à jour de toutes les statistiques avec sp_updatestats

Pour plus d'informations sur la mise à jour des statistiques pour toutes les tables définies par l'utilisateur et les tables internes de la base de données, consultez la procédure stockée sp_updatestats (Transact-SQL). Par exemple, la commande suivante appelle sp_updatestats pour mettre à jour toutes les statistiques de la base de données.

EXEC sp_updatestats

Détermination de la dernière mise à jour des statistiques

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

Autorisations

Requiert une autorisation ALTER sur la table ou vue.

Exemples

A. Mettre à jour toutes les statistiques d'une table

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

USE AdventureWorks2008R2;
GO
UPDATE STATISTICS Sales.SalesOrderDetail;
GO

B. Mettre à jour les statistiques d'un index

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

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

C. Mettre à jour des statistiques avec un échantillonnage de 50 pour cent

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

USE AdventureWorks2008R2;
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. Mettre à jour des statistiques avec FULLSCAN et NORECOMPUTE

L'exemple suivant met à jour les statistiques de 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 les statistiques de Products.

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