DBCC SHOW_STATISTICS (Transact-SQL)

DBCC SHOW_STATISTICS zeigt die aktuelle Abfrageoptimierungsstatistik für eine Tabelle oder eine indizierte Sicht an. Der Abfrageoptimierer verwendet Statistiken, um die Kardinalität oder Anzahl der Zeilen im Abfrageergebnis zu schätzen. Hierdurch wird es dem Abfrageoptimierer ermöglicht, einen hochwertigen Abfrageplan zu erstellen. Beispielsweise kann der Abfrageoptimierer Kardinalitätsschätzungen verwenden, um im Abfrageplan statt des Index Scan-Operators den Index Seek-Operator auszuwählen und so die Abfrageleistung zu verbessern, indem ein ressourcenintensiver Indexscan vermieden wird.

Der Abfrageoptimierer speichert die Statistiken für eine Tabelle oder indizierte Sicht in einem Statistikobjekt. Für eine Tabelle wird das Statistikobjekt entweder für einen Index oder eine Liste mit Tabellenspalten erstellt. Das Statistikobjekt enthält einen Header mit Metadaten über die Statistik, ein Histogramm mit der Verteilung der Werte in der ersten Schlüsselspalte des Statistikobjekts sowie einen Dichtevektor zum Messen der Korrelation zwischen Spalten. Database Engine (Datenbankmodul) kann Kardinalitätsschätzungen mit beliebigen Daten des Statistikobjekts berechnen.

DBCC SHOW_STATISTICS zeigt den Header, das Histogramm und den Dichtevektor auf der Grundlage von Daten an, die im Statistikobjekt gespeichert sind. Die Syntax ermöglicht es Ihnen, eine Tabelle oder indizierte Sicht zusammen mit einem Zielindexnamen, Statistiknamen oder Spaltennamen anzugeben. In diesem Thema wird beschrieben, wie die Statistik angezeigt und die angezeigten Ergebnisse interpretiert werden.

Weitere Informationen finden Sie unter Verwenden von Statistiken zum Verbessern der Abfrageleistung.

Themenlink (Symbol)Transact-SQL-Syntaxkonventionen

Syntax

DBCC SHOW_STATISTICS ( table_or_indexed_view_name , target ) 
[ WITH [ NO_INFOMSGS ] < option > [ , n ] ]
< option > :: =
    STAT_HEADER | DENSITY_VECTOR | HISTOGRAM | STATS_STREAM

Argumente

  • table_or_indexed_view_name
    Name der Tabelle oder der indizierten Sicht, für die statistische Informationen angezeigt werden sollen.

  • target
    Der Name des Index, der Statistik oder der Spalte, für die Statistikinformationen angezeigt werden sollen. Wenn target ein Name eines vorhandenen Indexes oder einer vorhandenen Statistik für eine Tabelle oder eine indizierte Sicht ist, werden die Statistikinformationen zu diesem Ziel zurückgegeben. Wenn target der Name einer vorhandenen Spalte und eine automatisch erstellte Statistik für diese Spalte vorhanden ist, werden Informationen zu dieser automatisch erstellten Statistik zurückgegeben. Wenn keine automatisch erstellte Statistik für ein Spaltenziel vorhanden ist, wird die Fehlermeldung 2767 zurückgegeben.

  • NO_INFOMSGS
    Unterdrückt alle Informationsmeldungen, die einen Schweregrad von 0 bis 10 haben.

  • STAT_HEADER | DENSITY_VECTOR | HISTOGRAM | STATS_STREAM [ **,**n ]
    Wenn mindestens eine dieser Optionen angegeben wird, schränkt dies die Resultsets ein, die von der Anweisung an die angegebene Option oder die angegebenen Optionen zurückgegeben werden. Wenn keine Optionen angegeben sind, werden alle Statistikinformationen zurückgegeben.

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

Resultsets

In der folgenden Tabelle werden die Spalten beschrieben, die im Resultset zurückgegeben werden, wenn STAT_HEADER angegeben wird.

Spaltenname

Beschreibung

Name

Name des Statistikobjekts.

Updated

Datum und Uhrzeit der letzten Aktualisierung der Statistik. Die STATS_DATE-Funktion ist eine alternative Möglichkeit zum Abrufen dieser Informationen.

Rows

Gesamtanzahl der Zeilen in der Tabelle oder indizierten Sicht zum Zeitpunkt der letzten Aktualisierung der Statistik. Wenn die Statistik gefiltert wird oder einem gefilterten Index entspricht, kann die Anzahl der Zeilen geringer als die Anzahl der Zeilen in der Tabelle sein. Weitere Informationen finden Sie unter Verwenden von Statistiken zum Verbessern der Abfrageleistung.

Rows Sampled

Gesamtzahl der Zeilen, die für die statistischen Berechnungen in die Stichprobe aufgenommen wurden. Wenn Rows Sampled < Rows, sind das angezeigte Histogramm und die Dichteergebnisse Schätzungen auf Grundlage der als Stichprobe entnommenen Zeilen.

Steps

Anzahl der Schritte im Histogramm. Jeder Schritt umfasst einen Bereich von Spaltenwerten gefolgt von einem oberen Spaltengrenzwert. Die Histogrammschritte werden in der Statistik in der ersten Schlüsselspalte definiert. Die maximale Anzahl von Schritten ist 200.

Density

Berechnet als 1 / unterschiedliche Werte für alle Werte in der ersten Schlüsselspalte des Statistikobjekts mit Ausnahme der Begrenzungswerte des Histogramms. Dieser Dichtewert wird vom Abfrageoptimierer nicht verwendet und für die Abwärtskompatibilität mit Versionen vor SQL Server 2008 angezeigt.

Average Key Length

Durchschnittliche Anzahl von Bytes pro Wert für alle Schlüsselspalten im Statistikobjekt.

String Index

"Ja" gibt an, dass das Statistikobjekt Statistiken über Zusammenfassungen von Zeichenfolgen enthält, um die Kardinalitätsschätzungen für Abfrageprädikate, die den LIKE-Operator verwenden, zu verbessern, z. B. WHERE ProductName LIKE '%Bike'. Zusammenfassungen von Zeichenfolgen werden getrennt vom Histogramm gespeichert und in der ersten Schlüsselspalte des Statistikobjekts erstellt, wenn es vom Typ char, varchar, nchar, nvarchar, varchar(max), nvarchar(max), text oder ntext. ist.

Filter Expression

Prädikat für die Teilmenge von Tabellenzeilen, die im Statistikobjekt enthalten sind. NULL = Nicht gefilterte Statistik. Weitere Informationen zu gefilterten Prädikaten finden Sie unter Richtlinien für den Entwurf gefilterter Indizes. Weitere Informationen zu gefilterten Statistiken finden Sie unter Verwenden von Statistiken zum Verbessern der Abfrageleistung.

Unfiltered Rows

Gesamtzahl von Zeilen in der Tabelle vor dem Anwenden des Filterausdrucks. Wenn Filter Expression NULL ist, ist Unfiltered Rows gleich Rows.

In der folgenden Tabelle werden die Spalten beschrieben, die beim Angeben von DENSITY_VECTOR im Resultset zurückgegeben werden.

Spaltenname

Beschreibung

All Density

Die Dichte ist 1 / unterschiedliche Werte. Die Ergebnisse zeigen die Dichte für jedes Präfix von Spalten im Statistikobjekt mit einer Zeile pro Dichte an. Bei einem unterschiedlichen Wert handelt es sich um eine unterschiedliche Liste der Spaltenwerte pro Zeile und pro Spaltenpräfix. Wenn das Statistikobjekt beispielsweise Schlüsselspalten (A, B, C) enthält, geben die Ergebnisse die Dichte der unterschiedlichen Wertelisten jedes dieser Spaltenpräfixe an: (A), (A, B) und (A, B, C). Mit dem Präfix (A, B, C) ist jede dieser Listen eine Liste unterschiedlicher Werte: (3, 5, 6), (4, 4, 6), (4, 5, 6), (4, 5, 7). Mit dem Präfix (A, B) weisen dieselben Spaltenwerte diese Listen unterschiedlicher Werte auf: (3, 5), (4, 4) und (4, 5).

Average Length

Durchschnittliche Länge in Bytes zum Speichern einer Liste der Spaltenwerte für das Spaltenpräfix. Wenn die Werte in der Liste (3, 5, 6) beispielsweise jeweils 4 Bytes erfordern, beträgt die Länge 12 Bytes.

Columns

Namen der Spalten im Präfix, für die All density und Average length angezeigt werden.

Die folgende Tabelle beschreibt die Spalten, die im Resultset zurückgegeben werden, wenn die Option HISTOGRAM angegeben wird.

Spaltenname

Beschreibung

RANGE_HI_KEY

Oberer Spaltengrenzwert für einen Histogrammschritt. Der Spaltenwert wird auch als Schlüsselwert bezeichnet.

RANGE_ROWS

Geschätzte Anzahl von Zeilen, deren Spaltenwerte innerhalb eines Histogrammschritts liegen, ohne den oberen Grenzwert.

EQ_ROWS

Geschätzte Anzahl von Zeilen, deren Spaltenwerte der Obergrenze des Histogrammschritts entsprechen.

DISTINCT_RANGE_ROWS

Geschätzte Anzahl von Zeilen mit einem unterschiedlichen Spaltenwert innerhalb eines Histogrammschritts ohne den oberen Grenzwert.

AVG_RANGE_ROWS

Durchschnittliche Anzahl von Zeilen mit doppelten Spaltenwerten in einem Histogrammschritt ohne den oberen Grenzwert (RANGE_ROWS / DISTINCT_RANGE_ROWS für DISTINCT_RANGE_ROWS > 0).

Hinweise

Histogramm

Ein Histogramm misst die Häufigkeit des Vorkommens für jeden unterschiedlichen Wert in einem Dataset. Der Abfrageoptimierer berechnet ein Histogramm für die Spaltenwerte in der ersten Schlüsselspalte des Statistikobjekts und wählt die Spaltenwerte aus, indem statistische Zeilenstichproben entnommen werden oder indem ein vollständiger Scan aller Zeilen in der Tabelle oder Sicht ausgeführt wird. Wenn das Histogramm anhand einer Gruppe von Zeilenstichproben erstellt wird, handelt es sich bei der gespeicherten Gesamtzahl von Zeilen und unterschiedlichen Werten um Schätzungen, die keine ganzen Zahlen sein müssen.

Zum Erstellen des Histogramms sortiert der Abfrageoptimierer die Spaltenwerte, berechnet die Anzahl der Werte, die den einzelnen unterschiedlichen Spaltenwerten entsprechen, und aggregiert die Spaltenwerte dann in maximal 200 zusammenhängenden Histogrammschritten. Jeder Schritt umfasst einen Bereich von Spaltenwerten gefolgt von einem oberen Spaltengrenzwert. Der Bereich enthält alle möglichen Spaltenwerte zwischen den Begrenzungswerten, ohne die Begrenzungswerte selbst. Der niedrigste der sortierten Spaltenwerte ist der obere Grenzwert für den ersten Histogrammschritt.

Das folgende Diagramm zeigt ein Histogramm mit sechs Schritten. Der Bereich links vom ersten oberen Grenzwert ist der erste Schritt.

ms174384.a0ce6714-01f4-4943-a083-8cbd2d6f617a(de-de,SQL.100).gif

Für jeden Histogrammschritt gilt:

  • Eine fett formatierte Zeile stellt den oberen Grenzwert (RANGE_HI_KEY) und die Häufigkeit des Vorkommens dar (EQ_ROWS).

  • Der einfarbige Bereich links von RANGE_HI_KEY stellt den Bereich der Spaltenwerte und die durchschnittliche Häufigkeit des Vorkommens der einzelnen Spaltenwerte (AVG_RANGE_ROWS) dar. AVG_RANGE_ROWS ist für den ersten Histogrammschritt immer 0.

  • Gepunktete Linien stellen die als Stichprobe entnommenen Werte dar, die zum Schätzen der Anzahl der unterschiedlichen Werte im Bereich (DISTINCT_RANGE_ROWS) verwendet werden, sowie die Gesamtanzahl der Werte im Bereich (RANGE_ROWS). Der Abfrageoptimierer verwendet RANGE_ROWS und DISTINCT_RANGE_ROWS, um AVG_RANGE_ROWS zu berechnen. Die als Stichprobe entnommenen Werte werden nicht gespeichert.

Der Abfrageoptimierer definiert die Histogrammschritte gemäß ihrer statistischen Bedeutung. Dabei wird ein Algorithmus für die maximale Differenz verwendet, um die Anzahl der Schritte im Histogramm zu minimieren und gleichzeitig die Differenz zwischen den Begrenzungswerten zu maximieren. Die maximale Anzahl von Schritten ist 200. Die Anzahl von Histogrammschritten kann geringer sein als die Anzahl unterschiedlicher Werte, auch bei Spalten mit weniger als 200 Grenzpunkten. Beispielsweise kann eine Spalte mit 100 unterschiedlichen Werten ein Histogramm mit weniger als 100 Grenzpunkten aufweisen.

Dichtevektor

Der Abfrageoptimierer verwendet Dichten, um Kardinalitätsschätzungen für Abfragen zu erweitern, die mehrere Spalten aus derselben Tabelle oder indizierten Sicht zurückgeben. Der Dichtevektor enthält eine Dichte für jedes Präfix von Spalten im Statistikobjekt. Wenn ein Statistikobjekt beispielsweise die Schlüsselspalten CustomerId, ItemId und Price enthält, wird die Dichte für jedes der folgenden Spaltenpräfixe berechnet:

Spaltenpräfix

Dichte berechnet für

(CustomerId)

Zeilen mit übereinstimmenden Werten für CustomerId

(CustomerId, ItemId)

Zeilen mit übereinstimmenden Werten für CustomerId und ItemId

(CustomerId, ItemId, Price)

Zeilen mit übereinstimmenden Werten für CustomerId, ItemId und Price

Einschränkungen

DBCC SHOW_STATISTICS stellt keine Statistik für räumliche Indizes bereit.

Berechtigungen

Zum Anzeigen des Statistikobjekts muss der Benutzer Besitzer der Tabelle sein, oder der Benutzer muss ein Mitglied der festen Serverrolle sysadmin, der festen Datenbankrolle db_owner oder der festen Datenbankrolle db_ddladmin sein.

Beispiele

A. Zurückgeben aller Statistikinformationen

Im folgenden Beispiel werden alle Statistikinformationen für den AK_Product_Name -Index der Person.Address -Tabelle angezeigt.

USE AdventureWorks;
GO
DBCC SHOW_STATISTICS ("Person.Address", AK_Address_rowguid);
GO

B. Angeben der HISTOGRAM-Option

Im folgenden Beispiel werden die Statistikinformationen für den AK_Product_Name -Index auf die HISTOGRAM-Daten beschränkt.

USE AdventureWorks;
GO
DBCC SHOW_STATISTICS ("Person.Address", AK_Address_rowguid) WITH HISTOGRAM;
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.