Diese Dokumentation wurde archiviert und wird nicht länger gepflegt.

UPDATE STATISTICS (Transact-SQL)

Aktualisiert: 12. Dezember 2006

Aktualisiert Informationen zur Verteilung von Schlüsselwerten für eine oder mehrere Statistikgruppen (Auflistungen) in der angegebenen Tabelle oder indizierten Sicht. Hinweise zum Erstellen einer Statistik für eine Spalte finden Sie unter CREATE STATISTICS (Transact-SQL).

Themenlink (Symbol) Transact-SQL-Syntaxkonventionen


UPDATE STATISTICS table | view 
    [ 
        { 
            { index | statistics_name }
          | ( { index |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 ]

table | view

Der Name der Tabelle oder indizierten Sicht, für die die Statistik aktualisiert werden soll. Tabellen- oder Sichtnamen müssen den Regeln für Bezeichner entsprechen. Weitere Informationen finden Sie unter Verwenden von Bezeichnern als Objektnamen. Indexnamen sind innerhalb von Datenbanken nicht eindeutig. Daher muss table oder view angegeben werden. Das Angeben der Datenbank, Tabelle oder Sicht ist optional.

index

Der Index, für den die Statistik aktualisiert wird. Indexnamen müssen den Regeln für Bezeichner entsprechen. Wenn index nicht angegeben wird, werden alle Verteilungsstatistiken in der angegebenen Tabelle oder indizierten Sicht aktualisiert. Dies schließt Statistiken ein, die mithilfe der CREATE STATISTICS-Anweisung erstellt wurden, automatisch erstellte Statistiken und Statistiken, die als Nebenprodukt der Indexerstellung entstanden sind.

Um einen Bericht zu den Indizes eines Objekts anzuzeigen, führen Sie sp_helpindex aus, und geben Sie den Namen der Tabelle oder der Sicht an.

statistics_name

Der Name der zu aktualisierenden Statistikgruppe (Auflistung). Statistiknamen müssen den Regeln für Bezeichner entsprechen. Weitere Informationen zum Erstellen von Statistikgruppen finden Sie unter CREATE STATISTICS (Transact-SQL).

FULLSCAN

Gibt an, dass alle Zeilen in table oder view gelesen werden sollen, um die Statistik zusammenzustellen. FULLSCAN hat die gleiche Wirkung wie SAMPLE 100 PERCENT. FULLSCAN kann nicht in Verbindung mit der Option SAMPLE verwendet werden.

SAMPLE number { PERCENT | ROWS }

Legt den prozentualen Anteil der Tabelle oder indizierten Sicht oder die Anzahl von Zeilen fest, die beim Erstellen einer Statistik für größere Tabellen oder Sichten als Stichprobe verwendet werden sollen. Für number sind nur ganze Zahlen zulässig, gleichgültig ob PERCENT oder ROWS angegeben ist. Verwenden Sie SAMPLE number mit PERCENT oder ROWS, um das Standardverhalten für Stichproben für größere Tabellen oder Sichten zu verwenden. SQL Server 2005-Datenbankmodul stellt sicher, dass eine Mindestanzahl von Werten als Stichprobe verwendet wird, um eine aussagekräftige Statistik zu gewährleisten. Wenn aufgrund der Optionen PERCENT, ROWS oder number zu wenige Zeilen als Stichprobe verwendet werden, korrigiert Datenbankmodul automatisch die Größe der Stichprobe auf der Grundlage der in der Tabelle oder Sicht vorhandenen Zeilenanzahl. Die Stichprobe umfasst mindestens um die 1.000 Datenseiten. Werden von PERCENT, ROWS oder number mehr Werte erstellt, als für eine aussagekräftige Stichprobe erforderlich sind, versucht Datenbankmodul, diese dem angeforderten Stichprobenumfang anzupassen. Da bei der Erhebung von Stichproben jedoch alle Datenseiten gescannt werden, stimmt die tatsächliche Stichprobengröße eventuell nicht genau mit dem angegebenen Umfang überein. Eine Angabe von 0 PERCENT oder ROWS hat als Ergebnis eine leere Statistikgruppe zur Folge.

ms187348.note(de-de,SQL.90).gifHinweis:
Standardmäßig wird ein Stichprobenscan für die Zieltabelle oder indizierte Sicht ausgeführt. Datenbankmodul berechnet automatisch die erforderliche Stichprobengröße.

RESAMPLE

Gibt an, dass Statistiken mithilfe eines geerbten Faktor für die Stichprobennahme für alle vorhandenen Statistiken einschließlich der Indizes erfasst werden. Wenn aufgrund der Stichprobennahme zu wenige Zeilen für die Stichprobe erstellt werden, korrigiert Datenbankmodul automatisch die Größe der Stichprobe basierend auf der in der Tabelle oder Sicht vorhandenen Zeilenanzahl.

ALL | COLUMNS | INDEX

Gibt an, ob die UPDATE STATISTICS-Anweisung Spaltenstatistiken, Indexstatistiken oder alle vorhandenen Statistiken betrifft. Wird keine Option angegeben, betrifft die UPDATE STATISTICS-Anweisung alle Statistiken. Pro UPDATE STATISTICS-Anweisung kann nur ein Typ (ALL, COLUMNS oder INDEX) angegeben werden.

NORECOMPUTE

Gibt an, dass überholte Statistiken nicht automatisch neu berechnet werden. Statistiken sind je nach der Anzahl der für indizierte Spalten ausgeführten INSERT-, UPDATE- und DELETE-Vorgänge veraltet. Wenn diese Option angegeben wird, führt sie dazu, dass Datenbankmodul das automatische Neuerstellen von Statistiken deaktiviert. Um die automatische Neuberechnung von Statistiken wieder zu aktivieren, führen Sie die UPDATE STATISTICS-Anweisung ohne NORECOMPUTE aus. Oder führen Sie sp_autostats aus.

ms187348.note(de-de,SQL.90).gifWichtig:
Die Deaktivierung der automatischen Neuberechnung von Statistiken kann bewirken, dass der Abfrageoptimierer eine weniger optimale Strategie für Abfragen im Zusammenhang mit der angegebenen Tabelle wählt.

<update_stats_stream_option>

Nur für Informationszwecke identifiziert. Nicht unterstützt. Zukünftige Kompatibilität wird nicht sichergestellt.

Datenbankmodul speichert Statistiken über die Verteilung der Schlüsselwerte in den Indizes und bestimmt mithilfe dieser Statistiken, welche Indizes für die Abfrageverarbeitung verwendet werden sollen. Die Benutzer können mit der CREATE STATISTICS-Anweisung Statistiken für nicht indizierte Spalten erstellen. Die Abfrageoptimierung hängt von der Genauigkeit der Verteilungsschritte ab:

  • Wenn sich wichtige Änderungen in den Schlüsselwerten des Indexes zeigen, so führen Sie UPDATE STATISTICS für diesen Index erneut aus.
  • Verwenden Sie UPDATE STATISTICS, wenn in einer indizierten Spalte viele Daten hinzugefügt, geändert oder gelöscht wurden (d.h. wenn sich die Verteilung der Schlüsselwerte geändert hat) oder wenn die Tabelle mit der TRUNCATE TABLE-Anweisung abgeschnitten und dann erneut aufgefüllt wurde.

Mit der STATS_DATE-Funktion sehen Sie, wann die Statistik zuletzt aktualisiert wurde.

UPDATE STATISTICS WITH RESAMPLE aktualisiert sämtliche Statistiken einer Tabelle auf der Grundlage der aktuellen Stichprobenrate. Dies bedeutet, dass für an Indizes gebundene Statistiken, zu deren Erstellung beim Zusammenstellen des Indexes ein vollständiger Scan durchgeführt wurde, der gesamte Tabellenscan aktualisiert werden muss. Das kann sich insbesondere bei großen partitionierten Tabellen mit vielen Indizes als ein äußerst zeitaufwendiger Vorgang erweisen. Zum Aktualisieren jeder einzelnen Statistik müssen große Mengen von Daten gelesen werden. Zur Vermeidung dieses Problems sollten Sie nach Möglichkeit sp_updatestats (Transact-SQL) verwenden. Damit werden Statistiken nur bei Bedarf aktualisiert.

Statistiken können für Tabellen mit berechneten Spalten nur erstellt oder aktualisiert werden, wenn die Bedingungen gegeben sind, unter denen ein Index für diese Spalten erstellt werden kann. Weitere Informationen zu den Voraussetzungen und Einschränkungen beim Erstellen von Indizes für berechnete Spalten finden Sie unter CREATE INDEX (Transact-SQL).

Wenn Sie die automatische Neuberechnung von Statistiken deaktivieren, müssen Sie die statistischen Informationen manuell aktualisieren.

ms187348.note(de-de,SQL.90).gifHinweis:
Die UPDATE STATISTICS-Anweisung reaktiviert die automatische Statistikaktualisierung auf der Zieltabelle oder -sicht, es sei denn, die NORECOMPUTE-Klausel wurde angegeben.

Erfordert die ALTER-Berechtigung auf der Tabelle oder Sicht.

A. Aktualisieren aller Statistiken für eine einzelne Tabelle

Das folgende Beispiel aktualisiert die Verteilungsstatistik für alle Indizes der SalesOrderDetail-Tabelle.

USE AdventureWorks;
GO
UPDATE STATISTICS Sales.SalesOrderDetail;
GO

B. Aktualisieren der Statistiken für einen einzelnen Index

Das folgende Beispiel aktualisiert nur die Verteilungsinformationen für den AK_SalesOrderDetail_rowguid-Index der SalesOrderDetail-Tabelle.

USE AdventureWorks;
GO
UPDATE STATISTICS Sales.SalesOrderDetail AK_SalesOrderDetail_rowguid;
GO

C. Aktualisieren der Statistiken für bestimmte Statistikgruppen (Auflistungen) mit einer Stichprobengröße von 50 %

Das folgende Beispiel erstellt und aktualisiert die Statistikgruppe für die Spalten Name und ProductNumber in der Product-Tabelle.

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;

D. Aktualisieren der Statistiken für bestimmte Statistikgruppen (Auflistungen) mithilfe von FULLSCAN und NORECOMPUTE

Das folgende Beispiel aktualisiert die Products-Statistikgruppe (Auflistung) in der Product-Tabelle, erzwingt einen vollständigen Scan aller Zeilen in der ProductTabelle und deaktiviert die automatische Statistikaktualisierung für die Statistikgruppe (Auflistung).

USE AdventureWorks;
GO
UPDATE STATISTICS Production.Product(Products)
    WITH FULLSCAN, NORECOMPUTE;
GO

Version Verlauf

12. Dezember 2006

Geänderter Inhalt:
  • In den Hinweisen wurde die Anweisung "UPDATE STATISTICS" entfernt, die in einer expliziten oder implizierten Transaktion nicht zulässig ist. Diese Einschränkung gilt nicht für SQL Server 2005.
Anzeigen: