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'échantillon de lignes à des fins statistiques.
S'applique à : SQL Server (SQL Server 2008 via la version actuelle, Base de données SQL Windows Azure (version initiale via la version actuelle. |
Conventions de la 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
[ 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 ]
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 d'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.
ON PARTITIONS ( { <partition_number> | <range> } [, …n] ) ]
Impose le recalcul des statistiques au niveau feuille couvrant les partitions spécifiées dans la clause ON PARTITIONS, puis leur fusion afin de générer des statistiques globales. 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.S'applique à : SQL Server 2014 et SQL Server 2014.
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.
Avertissement
L'utilisation de cette option peut produire des plans de requête 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 d'ALTER DATABASE (Transact-SQL).
INCREMENTAL = { ON | OFF }
Lorsque la valeur ON est définie, les statistiques sont recréées par partition. Avec la valeur OFF, l'arborescence des statistiques est supprimée et SQL Server recalcule les statistiques. La valeur par défaut est OFF.Si les statistiques par partition ne sont pas prises en charge, une erreur est générée. Les statistiques incrémentielles ne sont pas prises en charge pour les types de statistiques suivants :
Statistiques créées avec des index qui ne sont pas alignés sur les partitions avec la table de base.
Statistiques créées sur les bases de données secondaires lisibles AlwaysOn.
Statistiques créées sur les bases de données en lecture seule.
Statistiques créées sur les index filtrés.
Statistiques créées sur les vues.
Statistiques créées sur les tables internes.
Statistiques créées avec les index spatiaux ou les index XML.
S'applique à : SQL Server 2014 et SQL Server 2014.
<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 Statistiques.
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
Nécessite 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 AdventureWorks2012;
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 AdventureWorks2012;
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 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.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 AdventureWorks2012;
GO
UPDATE STATISTICS Production.Product(Products)
WITH FULLSCAN, NORECOMPUTE;
GO
Voir aussi
Référence
CREATE STATISTICS (Transact-SQL)
DBCC SHOW_STATISTICS (Transact-SQL)
DROP STATISTICS (Transact-SQL)