J'ai suivi le cours MS10775A la semaine dernière et une des questions à laquelle le formateur n'a pas pu répondre de manière fiable est la suivante:
Est-ce qu'une réindexation met à jour les statistiques?
Nous avons trouvé des discussions en ligne affirmant à la fois que oui et non.
REINDEX
mise à jour des statistiques de colonne est un effet secondaire de la reconstruction de l'index - vous n'avez pas besoin de mettre à jour les statistiques. Les données dans la table ne changent pas. Ce sont les mêmes données, il a seulement déplacé son emplacement sur le plateau en rotation (lorsqu'une page est réorganisée), ou b) assis sur une page différente (dans le cas d'une reconstruction). Donc: une réindexation fait des statistiques de mise à jour (certains): il n'y a pas besoin de le faire.Réponses:
Vous pouvez garder à l’esprit les points suivants lorsque vous vous souciez de la mise à jour des statistiques (copiées à partir de Reconstruire des index et mettre à jour des statistiques (Benjamin Nevarez)
Par défaut, l'
UPDATE STATISTICS
instruction utilise uniquement un échantillon d'enregistrements de la table. UtiliserUPDATE STATISTICS WITH FULLSCAN
va scanner toute la table.Par défaut, l'
UPDATE STATISTICS
instruction met à jour les statistiques d'index et de colonne. Utiliser cetteCOLUMNS
option ne mettra à jour que les statistiques de colonne. Utiliser cetteINDEX
option ne mettra à jour que les statistiques d'index.La reconstruction d'un index , par exemple en utilisant,
ALTER INDEX … REBUILD
mettra également à jour les statistiques d'index avec l'équivalent de l'utilisationWITH FULLSCAN
sauf si la table est partitionnée, auquel cas les statistiques sont uniquement échantillonnées (s'applique à SQL Server 2012 et versions ultérieures).Les statistiques créées manuellement à l'aide de
CREATE STATISTICS
ne sont mises à jour par aucuneALTER INDEX ... REBUILD
opération, y comprisALTER TABLE ... REBUILD
.ALTER TABLE ... REBUILD
met à jour les statistiques pour l'index clusterisé, s'il en existe un défini sur la table en cours de reconstruction.Réorganiser un index , par exemple, utiliser
ALTER INDEX … REORGANIZE
ne met à jour aucune statistique.La réponse courte est que vous devez utiliser
UPDATE STATISTICS
pour mettre à jour les statistiques de colonne et qu'une reconstruction d'index mettra à jour uniquement les statistiques d'index. Vous pouvez forcer la mise à jour de toutes les statistiques d'une table, y compris index-stats et statistiques créées manuellement, avec laUPDATE STATISTICS (tablename) WITH FULLSCAN;
syntaxe.Le code suivant illustre les règles encapsulées ci-dessus:
Tout d'abord, nous allons créer une table avec quelques colonnes et un index clusterisé:
Cette requête indique la date de la dernière mise à jour de chaque objet de statistiques:
Les résultats montrent qu'aucune mise à jour n'a encore eu lieu, ce qui est correct puisque nous venons de créer la table:
Reconstruisons la table entière et voyons si cela met à jour les statistiques:
Les résultats montrent que seules les statistiques de l' index clusterisé ont été mises à jour.
Ensuite, nous effectuons une
UPDATE STATS
opération discrète :Comme vous pouvez le constater, nous venons de mettre à jour les statistiques de la
d
colonne:Maintenant, nous allons mettre à jour les statistiques sur toute la table:
Comme vous pouvez le constater, le seul moyen de vérifier que toutes les statistiques ont été mises à jour est de les mettre à jour manuellement ou de mettre à jour le tableau entier
UPDATE STATISTICS (table);
.la source
ALTER INDEX ... REBUILD
uneUPDATE STATISTICS
instruction ou une déclaration. Si la table elle-même est reconstruite, seules les statistiques d'index en cluster sont mises à jour. Pour votre information, une clé primaire et un index clusterisé ne sont pas nécessairement pris en charge par le même objet d'index.La page Microsoft Documents pour les statistiques SQL Server indique :
la source