UPDATE STATISTICS (Transact-SQL)UPDATE STATISTICS (Transact-SQL)

CETTE RUBRIQUE S’APPLIQUE À :ouiSQL Server (à partir de la version 2008)ouiAzure SQL DatabaseouiAzure SQL Data Warehouse ouiParallel Data Warehouse THIS TOPIC APPLIES TO: yesSQL Server (starting with 2008)yesAzure SQL DatabaseyesAzure SQL Data Warehouse yesParallel Data Warehouse

Met à jour les statistiques d'optimisation de requête d'une table ou d'une vue indexée.Updates query optimization statistics on a table or indexed view. Par défaut, l’optimiseur de requête met à jour les statistiques selon les besoins pour améliorer le plan de requête ; Dans certains cas, vous pouvez améliorer les performances des requêtes à l’aide de UPDATE STATISTICS ou la procédure stockée sp_updatestats pour mettre à jour des statistiques plus fréquemment que les mises à jour par défaut.By default, the query optimizer already updates statistics as necessary to improve the query plan; in some cases you can improve query performance by using UPDATE STATISTICS or the stored procedure sp_updatestats to update statistics more frequently than the default updates.

La mise à jour des statistiques est l'assurance que les requêtes sont compilées avec des statistiques à jour.Updating statistics ensures that queries compile with up-to-date statistics. Toutefois, la mise à jour des statistiques entraîne une recompilation des requêtes.However, updating statistics causes queries to recompile. À 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.We recommend not updating statistics too frequently because there is a performance tradeoff between improving query plans and the time it takes to recompile queries. Ce compromis peut varier en fonction de votre application.The specific tradeoffs depend on your application. UPDATE STATISTICS peut utiliser tempdb pour trier l’échantillon de lignes à des fins statistiques.UPDATE STATISTICS can use tempdb to sort the sample of rows for building statistics.

Icône de lien de rubrique Conventions de la syntaxe Transact-SQLTopic link icon Transact-SQL Syntax Conventions

SyntaxeSyntax

-- Syntax for SQL Server and Azure SQL Database  

UPDATE STATISTICS table_or_indexed_view_name   
    [   
        {   
            { index_or_statistics__name }  
          | ( { index_or_statistics_name } [ ,...n ] )   
                }  
    ]   
    [    WITH   
        [  
            FULLSCAN   
              [ [ , ] PERSIST_SAMPLE_PERCENT = { ON | OFF } ]    
            | SAMPLE number { PERCENT | ROWS }   
              [ [ , ] PERSIST_SAMPLE_PERCENT = { ON | OFF } ]    
            | RESAMPLE   
              [ ON PARTITIONS ( { <partition_number> | <range> } [, …n] ) ]  
            | <update_stats_stream_option> [ ,...n ]  
        ]   
        [ [ , ] [ ALL | COLUMNS | INDEX ]   
        [ [ , ] NORECOMPUTE ]   
        [ [ , ] INCREMENTAL = { ON | OFF } ]  
    ] ;  

<update_stats_stream_option> ::=  
    [ STATS_STREAM = stats_stream ]  
    [ ROWCOUNT = numeric_constant ]  
    [ PAGECOUNT = numeric_contant ]  
-- Syntax for Azure SQL Data Warehouse and Parallel Data Warehouse  

UPDATE STATISTICS schema_name . ] table_name   
    [ ( { statistics_name | index_name } ) ]  
    [ WITH   
       {  
              FULLSCAN   
            | SAMPLE number PERCENT   
            | RESAMPLE   
        }  
    ]  
[;]  

ArgumentsArguments

table_or_indexed_view_nametable_or_indexed_view_name
Est le nom de la table ou la vue indexée qui contient l’objet de statistiques.Is the name of the table or indexed view that contains the statistics object.

index_or_statistics_nameindex_or_statistics_name
Nom de l'index dont les statistiques doivent être mises à jour ou nom des statistiques à mettre à jour.Is the name of the index to update statistics on or name of the statistics to update. Si index_or_statistics_name n’est pas spécifié, l’optimiseur de requête met à jour toutes les statistiques de la table ou vue indexée.If index_or_statistics_name is not specified, the query optimizer updates all statistics for the table or indexed view. 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.This includes statistics created using the CREATE STATISTICS statement, single-column statistics created when AUTO_CREATE_STATISTICS is on, and statistics created for indexes.

Pour plus d’informations sur AUTO_CREATE_STATISTICS, consultez Options ALTER DATABASE SET ( Transact-SQL ) .For more information about AUTO_CREATE_STATISTICS, see ALTER DATABASE SET Options (Transact-SQL). Pour afficher tous les index d’une table ou une vue, vous pouvez utiliser sp_helpindex.To view all indexes for a table or view, you can use sp_helpindex.

FULLSCANFULLSCAN
Calcule les statistiques en analysant toutes les lignes dans la table ou vue indexée.Compute statistics by scanning all rows in the table or indexed view. FULLSCAN et SAMPLE 100 PERCENT ont les mêmes résultats.FULLSCAN and SAMPLE 100 PERCENT have the same results. Cette option ne peut pas être utilisée avec l'option SAMPLE.FULLSCAN cannot be used with the SAMPLE option.

EXEMPLE nombre {% | LIGNES}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.Specifies the approximate percentage or number of rows in the table or indexed view for the query optimizer to use when it updates statistics. Pour PERCENT, nombre peut être comprise entre 0 et 100 et des lignes, nombre peut être comprise entre 0 et le nombre total de lignes.For PERCENT, number can be from 0 through 100 and for ROWS, number can be from 0 to the total number of rows. 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é.The actual percentage or number of rows the query optimizer samples might not match the percentage or number specified. Par exemple, l'optimiseur de requête analyse toutes les lignes d'une page de données.For example, the query optimizer scans all rows on a data page.

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.SAMPLE is useful for special cases in which the query plan, based on default sampling, is not 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é.In most situations, it is not necessary to specify SAMPLE because the query optimizer uses sampling and determines the statistically significant sample size by default, as required to create high-quality query plans.

En commençant par SQL Server 2016SQL Server 2016, l’échantillonnage des données pour générer des statistiques s’effectue en parallèle, lors de l’utilisation du niveau de compatibilité 130, pour améliorer les performances de la collection de statistiques.Starting with SQL Server 2016SQL Server 2016, sampling of data to build statistics is done in parallel, when using compatibility level 130, to improve the performance of statistics collection. L’optimiseur de requête utilise des statistiques d’échantillon parallèle, chaque fois qu’une taille de la table dépasse un certain seuil.The query optimizer will use parallel sample statistics, whenever a table size exceeds a certain threshold.

SAMPLE ne peut pas être utilisé avec l'option FULLSCAN.SAMPLE cannot be used with the FULLSCAN option. 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.When neither SAMPLE nor FULLSCAN is specified, the query optimizer uses sampled data and computes the sample size by default.

Il est déconseillé de spécifier 0 PERCENT ou 0 ROWS.We recommend against specifying 0 PERCENT or 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.When 0 PERCENT or ROWS is specified, the statistics object is updated but does not contain statistics data.

Pour la plupart des charges de travail, une analyse complète n’est pas obligatoire, et l’échantillonnage par défaut est suffisante.For most workloads, a full scan is not required, and default sampling is adequate.
Toutefois, certaines charges de travail qui sont sensibles aux différents des distributions de données peuvent nécessiter une taille d’échantillon augmenté, ou même une analyse complète.However, certain workloads that are sensitive to widely varying data distributions may require an increased sample size, or even a full scan.
Pour plus d’informations, consultez la blog CSS SQL escalade Services.For more information, see the CSS SQL Escalation Services blog.

RESAMPLERESAMPLE
Met à jour chaque statistique à l'aide de son taux d'échantillonnage le plus récent.Update each statistic using its most recent sample rate.

L'utilisation de RESAMPLE peut entraîner une analyse complète de la table.Using RESAMPLE can result in a full-table scan. Par exemple, les statistiques relatives aux index utilisent une analyse de table complète pour leur taux d'échantillonnage.For example, statistics for indexes use a full-table scan for their sample rate. 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.When none of the sample options (SAMPLE, FULLSCAN, RESAMPLE) are specified, the query optimizer samples the data and computes the sample size by default.

PERSIST_SAMPLE_PERCENT = {ON | {OFF}PERSIST_SAMPLE_PERCENT = { ON | OFF }
Lorsque ON, les statistiques conservera le pourcentage d’échantillonnage défini pour les mises à jour qui ne spécifient pas explicitement un pourcentage d’échantillonnage.When ON, the statistics will retain the set sampling percentage for subsequent updates that do not explicitly specify a sampling percentage. Lorsque OFF, pourcentage d’échantillonnage des statistiques sera réinitialisée à échantillonnage par défaut dans les mises à jour qui ne spécifient pas explicitement un pourcentage d’échantillonnage.When OFF, statistics sampling percentage will get reset to default sampling in subsequent updates that do not explicitly specify a sampling percentage. La valeur par défaut est OFF.The default is OFF.

Note

Si l’option AUTO_UPDATE_STATISTICS est exécutée, il utilise le pourcentage d’échantillonnage persistante si elle est disponible, ou utiliser le pourcentage d’échantillonnage par défaut dans le cas contraire.If AUTO_UPDATE_STATISTICS is executed, it uses the persisted sampling percentage if available, or use default sampling percentage if not. RÉÉCHANTILLONNER comportement n’est pas affecté par cette option.RESAMPLE behavior is not affected by this option.

Conseil

DBCC SHOW_STATISTICS et sys.dm_db_stats_properties exposer la valeur de pourcentage exemple persistante pour la statistique sélectionnée.DBCC SHOW_STATISTICS and sys.dm_db_stats_properties expose the persisted sample percent value for the selected statistic.

S’applique aux: SQL Server 2016SQL Server 2016 SP1 CU4.Applies to: SQL Server 2016SQL Server 2016 SP1 CU4.

SUR les PARTITIONS ({ <partition_number > | <plage >} [,... n]) ] Force les statistiques de niveau feuille couvrant les partitions spécifiées dans la clause ON PARTITIONS être recalculé et ensuite fusionnés pour générer des statistiques globales.ON PARTITIONS ( { <partition_number> | <range> } [, …n] ) ] Forces the leaf-level statistics covering the partitions specified in the ON PARTITIONS clause to be recomputed, and then merged to build the global statistics. WITH RESAMPLE est nécessaire car les statistiques de partitions créées avec différents taux d'échantillonnage ne peuvent pas être fusionnées ensemble.WITH RESAMPLE is required because partition statistics built with different sample rates cannot be merged together.

S’applique aux: SQL Server 2014SQL Server 2014 via SQL Server 2017SQL Server 2017Applies to: SQL Server 2014SQL Server 2014 through SQL Server 2017SQL Server 2017

ALL | COLUMNS | INDEXALL | 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.Update all existing statistics, statistics created on one or more columns, or statistics created for indexes. Si aucune option n'est spécifiée, l'instruction UPDATE STATISTICS met à jour toutes les statistiques de la table ou vue indexée.If none of the options are specified, the UPDATE STATISTICS statement updates all statistics on the table or indexed view.

NORECOMPUTENORECOMPUTE
Désactive l'option de mise à jour automatique des statistiques, AUTO_UPDATE_STATISTICS, pour les statistiques spécifiées.Disable the automatic statistics update option, AUTO_UPDATE_STATISTICS, for the specified statistics. 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.If this option is specified, the query optimizer completes this statistics update and disables future updates.

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.To re-enable the AUTO_UPDATE_STATISTICS option behavior, run UPDATE STATISTICS again without the NORECOMPUTE option or run sp_autostats.

Avertissement

L'utilisation de cette option peut produire des plans de requête non optimaux.Using this option can produce suboptimal query plans. Nous recommandons d'utiliser cette option avec parcimonie et uniquement par un administrateur système qualifié.We recommend using this option sparingly, and then only by a qualified system administrator.

Pour plus d’informations sur l’option AUTO_UPDATE_STATISTICS, consultez Options ALTER DATABASE SET ( Transact-SQL ) .For more information about the AUTO_STATISTICS_UPDATE option, see ALTER DATABASE SET Options (Transact-SQL).

INCREMENTAL = { ON | OFF }INCREMENTAL = { ON | OFF }
Lorsque ON, les statistiques sont recréées conformément aux statistiques de partition.When ON, the statistics are recreated as per partition statistics. Lorsque OFF, l’arborescence des statistiques est supprimée et SQL ServerSQL Server recalcule les statistiques.When OFF, the statistics tree is dropped and SQL ServerSQL Server re-computes the statistics. La valeur par défaut est OFF.The default is OFF.

Si les statistiques par partition ne sont pas prises en charge, une erreur est générée.If per partition statistics are not supported an error is generated. Les statistiques incrémentielles ne sont pas prises en charge pour les types de statistiques suivants :Incremental stats are not supported for following statistics types:

  • statistiques créées avec des index qui ne sont pas alignés sur les partitions avec la table de base ;Statistics created with indexes that are not partition-aligned with the base table.

  • statistiques créées sur les bases de données secondaires lisibles Always On ;Statistics created on Always On readable secondary databases.

  • statistiques créées sur les bases de données en lecture seule ;Statistics created on read-only databases.

  • statistiques créées sur les index filtrés ;Statistics created on filtered indexes.

  • statistiques créées sur les vues ;Statistics created on views.

  • statistiques créées sur les tables internes ;Statistics created on internal tables.

  • Statistiques créées avec les index spatiaux ou les index XML.Statistics created with spatial indexes or XML indexes.

S’applique aux: SQL Server 2014SQL Server 2014 via SQL Server 2017SQL Server 2017Applies to: SQL Server 2014SQL Server 2014 through SQL Server 2017SQL Server 2017

<update_stats_stream_option > Identifié à titre d'information uniquement.Identified for informational purposes only. Non pris en charge.Not supported. La compatibilité future n'est pas garantie.Future compatibility is not guaranteed.<update_stats_stream_option> Identifié à titre d'information uniquement.Identified for informational purposes only. Non pris en charge.Not supported. La compatibilité future n'est pas garantie.Future compatibility is not guaranteed.

NotesRemarks

Quand utiliser UPDATE STATISTICSWhen to Use UPDATE STATISTICS

Pour plus d’informations sur l’utilisation des statistiques de mise à jour, consultez statistiques.For more information about when to use UPDATE STATISTICS, see Statistics.

Mise à jour de toutes les statistiques avec sp_updatestatsUpdating All Statistics with 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).For information about how to update statistics for all user-defined and internal tables in the database, see the stored procedure sp_updatestats (Transact-SQL). Par exemple, la commande suivante appelle sp_updatestats pour mettre à jour toutes les statistiques de la base de données.For example, the following command calls sp_updatestats to update all statistics for the database.

EXEC sp_updatestats;  

Détermination de la dernière mise à jour des statistiquesDetermining the Last Statistics Update

Pour déterminer la date de la dernière mise à jour des statistiques, utilisez la fonction STATS_DATE .To determine when statistics were last updated, use the STATS_DATE function.

PDW / de l’entrepôt de données SQLPDW / SQL Data Warehouse

La syntaxe suivante n’est pas pris en charge par PDW / de l’entrepôt de données SQLThe following syntax is not supported by PDW / SQL Data Warehouse

update statistics t1 (a,b);   
update statistics t1 (a) with sample 10 rows;  
update statistics t1 (a) with NORECOMPUTE;  
update statistics t1 (a) with INCREMENTAL=ON;  
update statistics t1 (a) with stats_stream = 0x01;  

PermissionsPermissions

Nécessite une autorisation ALTER sur la table ou la vue.Requires ALTER permission on the table or view.

ExemplesExamples

A.A. Mettre à jour toutes les statistiques d'une tableUpdate all statistics on a table

L’exemple suivant met à jour les statistiques pour tous les index sur les SalesOrderDetail table.The following example updates the statistics for all indexes on the SalesOrderDetail table.

USE AdventureWorks2012;  
GO  
UPDATE STATISTICS Sales.SalesOrderDetail;  
GO  

B.B. Mettre à jour les statistiques d'un indexUpdate the statistics for an index

L'exemple suivant illustre la mise à jour des statistiques pour l'index AK_SalesOrderDetail_rowguid de la table SalesOrderDetail.The following example updates the statistics for the AK_SalesOrderDetail_rowguid index of the SalesOrderDetail table.

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

C.C. Mettre à jour des statistiques avec un échantillonnage de 50 pour centUpdate statistics by using 50 percent sampling

L'exemple suivant crée, puis met à jour les statistiques des colonnes Name et ProductNumber de la table Product.The following example creates and then updates the statistics for the Name and ProductNumber columns in the Product table.

USE AdventureWorks2012;  
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.D. Mettre à jour des statistiques avec FULLSCAN et NORECOMPUTEUpdate statistics by using FULLSCAN and 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.The following example updates the Products statistics in the Product table, forces a full scan of all rows in the Product table, and turns off automatic statistics for the Products statistics.

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

Exemples : Azure SQL Data WarehouseAzure SQL Data Warehouse et Parallel Data WarehouseParallel Data WarehouseExamples: Azure SQL Data WarehouseAzure SQL Data Warehouse and Parallel Data WarehouseParallel Data Warehouse

E.E. Mettre à jour les statistiques d’une tableUpdate statistics on a table

L’exemple suivant met à jour la CustomerStats1 des statistiques sur les Customer table.The following example updates the CustomerStats1 statistics on the Customer table.

UPDATE STATISTICS Customer ( CustomerStats1 );  

F.F. Mettre à jour des statistiques à l’aide d’une analyse complèteUpdate statistics by using a full scan

L’exemple suivant met à jour la CustomerStats1 des statistiques, en fonction de l’analyse de toutes les lignes dans la Customer table.The following example updates the CustomerStats1 statistics, based on scanning all of the rows in the Customer table.

UPDATE STATISTICS Customer (CustomerStats1) WITH FULLSCAN;  

G.G. Mettre à jour toutes les statistiques d'une tableUpdate all statistics on a table

L’exemple suivant met à jour toutes les statistiques sur les Customer table.The following example updates all statistics on the Customer table.

UPDATE STATISTICS Customer;  

Voir aussiSee Also

Statistiques Statistics
ALTER DATABASE (Transact-SQL) ALTER DATABASE (Transact-SQL)
CREATE STATISTICS (Transact-SQL) CREATE STATISTICS (Transact-SQL)
DBCC SHOW_STATISTICS (Transact-SQL) DBCC SHOW_STATISTICS (Transact-SQL)
DROP STATISTICS (Transact-SQL) DROP STATISTICS (Transact-SQL)
sp_autostats ( Transact-SQL ) sp_autostats (Transact-SQL)
sp_updatestats (Transact-SQL) sp_updatestats (Transact-SQL)
STATS_DATE ( Transact-SQL )STATS_DATE (Transact-SQL)
Sys.dm_db_stats_properties ( Transact-SQL )sys.dm_db_stats_properties (Transact-SQL)