UPDATE STATISTICS (Transact-SQL)
Aktualisiert eine Abfrageoptimierungsstatistik für eine Tabelle oder indizierte Sicht. Standardmäßig nimmt der Abfrageoptimierer erforderliche Updates der Statistiken automatisch vor, um den Abfrageplan zu verbessern. In einigen Fällen können Sie die Abfrageleistung mit UPDATE STATISTICS oder der gespeicherten Prozedur sp_updatestats verbessern, um Statistiken häufiger zu aktualisieren, als von der Standardeinstellung vorgegeben.
Durch das Update von Statistiken wird sichergestellt, dass Abfragen anhand aktueller Statistiken kompiliert werden. Dies führt jedoch dazu, dass Abfragen neu kompiliert werden. Es empfiehlt sich, Statistiken nicht zu oft zu aktualisieren und die Vorteile optimierter Abfragepläne gegen den Zeitaufwand für die Neukompilierung von Abfragen abzuwägen. Die Entscheidung hängt von der verwendeten Anwendung ab. UPDATE STATISTICS kann mithilfe von tempdb die Stichprobenzeilen zum Erstellen von Statistiken sortieren.
Gilt für: SQL Server (SQL Server 2008 bis aktuelle Version), Windows Azure SQL-Datenbank (Ursprüngliche Version bis aktuelle Version). |
Transact-SQL-Syntaxkonventionen
Syntax
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 ]
Argumente
table_or_indexed_view_name
Der Name der Tabelle oder indizierten Sicht, für die die Statistik aktualisiert werden soll.index_or_statistics_name
Der Name des Index, für den die Statistik aktualisiert werden soll, oder der Name der zu aktualisierenden Statistik. Wenn index_or_statistics_name nicht angegeben ist, aktualisiert der Abfrageoptimierer alle Statistiken für die Tabelle oder indizierte Sicht. Dies schließt Statistiken ein, die mithilfe der CREATE STATISTICS-Anweisung erstellt wurden, Statistiken für einzelne Spalten, die mit aktivierter AUTO_CREATE_STATISTICS-Option erstellt wurden, sowie für Indizes erstellte Statistiken.Weitere Informationen zu AUTO_CREATE_STATISTICS finden Sie unter ALTER DATABASE SET-Optionen (Transact-SQL). Um alle Indizes für eine Tabelle oder eine Sicht anzuzeigen, können Sie sp_helpindex verwenden.
FULLSCAN
Berechnen Sie die Statistik, indem Sie alle Zeilen in der Tabelle oder indizierten Sicht scannen. FULLSCAN und SAMPLE 100 PERCENT führen zu gleichen Ergebnissen. FULLSCAN kann nicht in Verbindung mit der SAMPLE-Option verwendet werden.SAMPLE number { PERCENT | ROWS }
Gibt den ungefähren Prozentsatz oder die ungefähre Anzahl von Zeilen in der Tabelle oder indizierten Sicht an, die vom Abfrageoptimierer beim Aktualisieren von Statistiken verwendet werden soll. Für PERCENT kann number Werte von 0 bis 100 annehmen, für ROWS kann number Werte von 0 bis zur Gesamtanzahl der Zeilen annehmen. Der tatsächliche Prozentsatz oder die tatsächliche Anzahl von Zeilen, die vom Abfrageoptimierer als Stichprobe entnommen werden, stimmt möglicherweise nicht mit dem angegebenen Prozentsatz oder der angegebenen Anzahl überein. Der Abfrageoptimierer scannt z. B. alle Zeilen auf einer Datenseite.SAMPLE eignet sich für Spezialfälle, in denen der auf Standardstichproben beruhende Abfrageplan nicht optimal ist. In den meisten Situationen muss SAMPLE nicht angegeben werden, da der Abfrageoptimierer standardmäßig Stichproben verwendet und die statistisch signifikante Stichprobengröße ermittelt, wie zum Erstellen hochwertiger Abfragepläne erforderlich.
SAMPLE kann nicht in Verbindung mit der Option FULLSCAN verwendet werden. Wenn weder SAMPLE noch FULLSCAN angegeben wurde, verwendet der Abfrageoptimierer Stichprobendaten und berechnet die Stichprobengröße anhand der Standardeinstellungen.
Es wird davon abgeraten, 0 PERCENT oder 0 ROWS anzugeben. Wenn 0 PERCENT oder ROWS angegeben ist, wird das Statistikobjekt aktualisiert, es enthält jedoch keine Statistikdaten.
RESAMPLE
Aktualisieren Sie alle Statistiken mithilfe ihrer letzten Samplingraten.Die Verwendung von RESAMPLE kann zu einem vollständigen Tabellenscan führen. Zum Beispiel verwenden die Statistiken für Indizes einen vollständigen Tabellenscan für ihre Beispielrate. Wenn keine der Stichprobenoptionen (SAMPLE, FULLSCAN, RESAMPLE) angegeben wurde, verwendet der Abfrageoptimierer Stichprobendaten und berechnet standardmäßig die Stichprobengröße.
ON PARTITIONS ( { <partition_number> | <range> } [, …n] ) ]
Erzwingt, dass die Statistiken auf Blattebene, die die in der ON PARTITIONS-Klausel angegebenen Partitionen umfassen, erneut berechnet und dann zusammengeführt werden, um die globale Statistik zu bilden. WITH RESAMPLE ist erforderlich, da mit unterschiedlichen Stichprobenraten erstellte Partitionsstatistiken nicht zusammengeführt werden können.Gilt für: SQL Server 2014 bis SQL Server 2014.
ALL | COLUMNS | INDEX
Aktualisieren Sie alle vorhandenen Statistiken, für eine oder mehrere Spalten erstellte Statistiken oder für Indizes erstellte Statistiken. Wenn keine der Optionen angegeben wird, aktualisiert die UPDATE STATISTICS-Anweisung alle Statistiken für die Tabelle oder indizierte Sicht.NORECOMPUTE
Deaktiviert die AUTO_UPDATE_STATISTICS-Option zum automatischen Statistikupdate für die angegebene Statistik. Wenn diese Option angegeben wird, schließt der Abfrageoptimierer dieses Statistikupdate ab und deaktiviert zukünftige Updates.Um das Verhalten der AUTO_UPDATE_STATISTICS-Option wieder zu aktivieren, führen Sie UPDATE STATISTICS erneut ohne die NORECOMPUTE-Option aus oder führen sp_autostats aus.
Warnung
Bei Verwendung dieser Option können suboptimale Abfragepläne entstehen.Es wird empfohlen, diese Option nur in Einzelfällen von einem qualifizierten Systemadministrator vornehmen zu lassen.
Weitere Informationen zur AUTO_STATISTICS_UPDATE-Option finden Sie unter ALTER DATABASE SET-Optionen (Transact-SQL).
INCREMENTAL = { ON | OFF }
ONgibt an, dass die Statistiken als Statistiken pro Partition neu erstellt werden. Bei OFF wird die Statistikstruktur gelöscht und die Statistik von SQL Server neu berechnet. Der Standardwert lautet OFF.Wenn Statistiken pro Partition nicht unterstützt werden, wird ein Fehler generiert. Inkrementelle Statistiken werden für folgende Statistiktypen nicht unterstützt:
Statistiken, die mit Indizes erstellt wurden, die über keine Partitionsausrichtung mit der Basistabelle verfügen.
Statistiken, die mit lesbaren sekundären AlwaysOn-Datenbanken erstellt wurden.
Statistiken, die für schreibgeschützte Datenbanken erstellt wurden.
Statistiken, die für gefilterte Indizes erstellt wurden.
Statistiken, die für Sichten erstellt wurden.
Statistiken, die für interne Tabellen erstellt wurden.
Statistiken, die mit räumlichen Indizes oder XML-Indizes erstellt wurden.
Gilt für: SQL Server 2014 bis SQL Server 2014.
<update_stats_stream_option>
Nur für Informationszwecke identifiziert. Nicht unterstützt. Zukünftige Kompatibilität wird nicht sichergestellt.
Hinweise
Wann UPDATE STATISTICS verwendet werden sollte
Weitere Informationen dazu, wann UPDATE STATISTICS verwendet werden sollte, finden Sie unter Statistik.
Aktualisieren aller Statistiken mit "sp_updatestats"
Informationen zum Aktualisieren von Statistiken für alle benutzerdefinierten und internen Tabellen in der Datenbank finden Sie in der Beschreibung der gespeicherten Prozedur sp_updatestats (Transact-SQL). Durch den folgenden Befehl wird beispielsweise sp_updatestats zum Aktualisieren aller Statistiken für die Datenbank aufgerufen.
EXEC sp_updatestats;
Ermitteln des letzten Statistikupdates
Um zu ermitteln, wann Statistiken zuletzt aktualisiert wurden, verwenden Sie die STATS_DATE-Funktion.
Berechtigungen
Erfordert die ALTER-Berechtigung für die Tabelle oder Sicht.
Beispiele
A.Update aller Statistiken für eine Tabelle
Im folgenden Beispiel wird die Statistik für alle Indizes in der SalesOrderDetail-Tabelle aktualisiert.
USE AdventureWorks2012;
GO
UPDATE STATISTICS Sales.SalesOrderDetail;
GO
B.Aktualisieren der Statistiken für einen Index
Im folgenden Beispiel wird die Statistik für den AK_SalesOrderDetail_rowguid-Index der SalesOrderDetail-Tabelle aktualisiert.
USE AdventureWorks2012;
GO
UPDATE STATISTICS Sales.SalesOrderDetail AK_SalesOrderDetail_rowguid;
GO
C.Aktualisieren von Statistiken mit einer Stichprobengröße von 50 %
Im folgenden Beispiel wird die Statistik für die Name-Spalte und die ProductNumber-Spalte in der Product-Tabelle erstellt.
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.Aktualisieren von Statistiken mit FULLSCAN und NORECOMPUTE
Im folgenden Beispiel wird die Products-Statistik in der Product-Tabelle aktualisiert, ein vollständiger Scan aller Zeilen in der Product-Tabelle erzwungen und alle automatischen Statistiken für die Products-Statistik deaktiviert.
USE AdventureWorks2012;
GO
UPDATE STATISTICS Production.Product(Products)
WITH FULLSCAN, NORECOMPUTE;
GO
Siehe auch
Verweis
CREATE STATISTICS (Transact-SQL)
DBCC SHOW_STATISTICS (Transact-SQL)
DROP STATISTICS (Transact-SQL)