UPDATE STATISTICS (Transact-SQL)

Aktualisiert eine Abfrageoptimierungsstatistik für eine Tabelle oder indizierte Sicht. Standardmäßig nimmt der Abfrageoptimierer erforderliche Aktualisierungen 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 die Aktualisierung 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.

Weitere Informationen zu Statistiken, einschließlich der Verwendung von UPDATE STATISTICS, finden Sie unter Verwenden von Statistiken zum Verbessern der Abfrageleistung.

Themenlink (Symbol)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 
            | <update_stats_stream_option> [ ,...n ]
        ] 
        [ [ , ] [ ALL | COLUMNS | INDEX ] 
        [ [ , ] NORECOMPUTE ] 
    ] ;

<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.

  • 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 zur automatischen Statistikaktualisierung für die angegebene Statistik. Wenn diese Option angegeben wird, schließt der Abfrageoptimierer diese Statistikaktualisierung ab und deaktiviert zukünftige Aktualisierungen.

    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.

    VorsichtshinweisVorsicht

    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). Weitere Informationen zum Deaktivieren und erneuten Aktivieren von Statistikaktualisierungen finden Sie unter Verwenden von Statistiken zum Verbessern der Abfrageleistung.

  • <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 Verwenden von Statistiken zum Verbessern der Abfrageleistung.

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 der letzten Statistikaktualisierung

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. Aktualisierung aller Statistiken für eine Tabelle

Im folgenden Beispiel wird die Statistik für alle Indizes in der SalesOrderDetail-Tabelle aktualisiert.

USE AdventureWorks;
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 AdventureWorks;
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 AdventureWorks;
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;

B. Aktualisieren von Statistiken mit FULLSCAN und NORECOMPUTE

Im folgenden Beispiel werden 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 AdventureWorks;
GO
UPDATE STATISTICS Production.Product(Products)
    WITH FULLSCAN, NORECOMPUTE;
GO

Änderungsverlauf

Aktualisierter Inhalt

Das gesamte Dokument wurde überarbeitet, um die Genauigkeit zu verbessern.

Das Thema verweist auf neuen Statistikinhalt im Thema Verwenden von Statistiken zum Verbessern der Abfrageleistung.