Ich habe in der vergangenen Woche den MS10775A-Kurs absolviert und eine Frage, die der Trainer nicht zuverlässig beantworten konnte, ist:
Aktualisiert ein Neuindex die Statistiken?
Wir fanden Diskussionen online, in denen wir sowohl darüber diskutierten, dass dies der Fall ist, als auch darüber, dass dies nicht der Fall ist.
sql-server
index
sql-server-2012
index-tuning
statistics
Thor Erik
quelle
quelle
REINDEX
nicht aktualisiert Spaltenstatistiken als Nebeneffekt den Index wieder aufzubauen - Sie müssen nicht brauchen , die Statistiken zu aktualisieren , um. Die Daten in der Tabelle ändern sich nicht. Es sind die gleichen Daten, es ist nur a) die Position auf dem sich drehenden Plattenteller verschoben (wenn eine Seite neu organisiert wird) oder b) auf einer anderen Seite (im Fall eines Neuaufbaus). Also: ein Re-Index hat update (einige) Statistiken: Es gibt keine Notwendigkeit , es zu tun.Antworten:
Beachten Sie Folgendes, wenn Sie sich um die Aktualisierung von Statistiken kümmern (kopiert aus Neuerstellung von Indizes vs. Aktualisierung von Statistiken (Benjamin Nevarez))
Standardmäßig verwendet die
UPDATE STATISTICS
Anweisung nur eine Stichprobe von Datensätzen der Tabelle. MitUPDATE STATISTICS WITH FULLSCAN
scannen Sie die gesamte Tabelle.Standardmäßig
UPDATE STATISTICS
aktualisiert die Anweisung sowohl die Index- als auch die Spaltenstatistik. Mit dieserCOLUMNS
Option werden nur die Spaltenstatistiken aktualisiert. Mit dieserINDEX
Option werden nur die Indexstatistiken aktualisiert.Durch das Neuerstellen eines Index , beispielsweise mithilfe von,
ALTER INDEX … REBUILD
werden auch die Indexstatistiken mit dem Äquivalent von using aktualisiert,WITH FULLSCAN
sofern die Tabelle nicht partitioniert ist. In diesem Fall werden nur Stichproben der Statistiken erstellt (gilt für SQL Server 2012 und höher).Statistiken, die manuell mit erstellt wurden,
CREATE STATISTICS
werden durch keineALTER INDEX ... REBUILD
Operation aktualisiert , einschließlichALTER TABLE ... REBUILD
.ALTER TABLE ... REBUILD
Aktualisiert die Statistiken für den Clustered-Index, wenn einer für die neu erstellte Tabelle definiert ist.Durch das Reorganisieren eines Index , beispielsweise mit, werden
ALTER INDEX … REORGANIZE
keine Statistiken aktualisiert.Die kurze Antwort lautet, dass Sie
UPDATE STATISTICS
zum Aktualisieren von Spaltenstatistiken verwenden müssen und dass bei einer Indexwiederherstellung nur die Indexstatistiken aktualisiert werden. Sie können mit derUPDATE STATISTICS (tablename) WITH FULLSCAN;
Syntax eine Aktualisierung aller Statistiken für eine Tabelle erzwingen, einschließlich Indexstatistiken und manuell erstellter Statistiken .Der folgende Code veranschaulicht die oben gekapselten Regeln:
Zunächst erstellen wir eine Tabelle mit einigen Spalten und einem Clustered-Index:
Diese Abfrage zeigt das Datum, an dem jedes Statistikobjekt zuletzt aktualisiert wurde:
Die Ergebnisse zeigen, dass noch keine Aktualisierungen stattgefunden haben. Dies ist korrekt, da wir gerade die Tabelle erstellt haben:
Lassen Sie uns die gesamte Tabelle neu erstellen und prüfen, ob die Statistiken aktualisiert werden:
Die Ergebnisse zeigen, dass nur die Clustered-Index- Statistiken aktualisiert wurden.
Als nächstes führen wir eine diskrete
UPDATE STATS
Operation durch:Wie Sie sehen, haben wir gerade die Statistiken in der
d
Spalte aktualisiert :Jetzt aktualisieren wir die Statistiken für die gesamte Tabelle:
Wie Sie sehen, besteht die einzige Möglichkeit, sicherzustellen, dass alle Statistiken aktualisiert werden, darin, entweder die einzelnen manuell zu aktualisieren oder die gesamte Tabelle mit zu aktualisieren
UPDATE STATISTICS (table);
.quelle
ALTER INDEX ... REBUILD
oder eineUPDATE STATISTICS
Anweisung explizit aktualisiert wurden . Wenn die Tabelle selbst neu erstellt wird, werden nur die Clustered-Index-Statistiken aktualisiert. Zu Ihrer Information: Ein Primärschlüssel und ein Clustered-Index werden nicht unbedingt von demselben Indexobjekt unterstützt.Die Microsoft Docs-Seite für SQL Server-Statistiken enthält folgende Informationen :
quelle