DBCC SHOW_STATISTICS (Transact-SQL)

 

DIESES THEMA GILT FÜR:jaSQL Server (ab 2008)jaAzure SQL-DatenbankjaAzure SQL Data Warehouse jaParallel Data Warehouse

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

Topic link icon Transact-SQL-Syntaxkonventionen

-- Syntax for SQL Server and Azure SQL Database  
  
DBCC SHOW_STATISTICS ( table_or_indexed_view_name , target )   
[ WITH [ NO_INFOMSGS ] < option > [ , n ] ]  
< option > :: =  
    STAT_HEADER | DENSITY_VECTOR | HISTOGRAM | STATS_STREAM  

-- Syntax for Azure SQL Data Warehouse and Parallel Data Warehouse  
  
DBCC SHOW_STATISTICS ( table_name , target )   
    [ WITH {STAT_HEADER | DENSITY_VECTOR | HISTOGRAM } [ ,...n ] ]  
[;]  

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

Tabellenname
Der Name der Tabelle, die die Statistik anzuzeigenden enthält. Die Tabelle kann nicht auf eine externe Tabelle sein.

Ziel
Der Name des Indexes, der Statistik oder der Spalte, für die Statistikinformationen angezeigt werden sollen. Ziel wird in Klammern eingeschlossen einzelne Anführungszeichen, doppelte Anführungszeichen oder ohne Anführungszeichen. Wenn Ziel ist ein Name eines vorhandenen Indexes oder Statistiken für eine Tabelle oder indizierten Sicht, die statistische Informationen zu diesem Ziel zurückgegeben. Wenn Ziel ist 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.

In SQL Data Warehouse und Parallel Data Warehouse, Ziel kann kein Spaltenname sein.

NO_INFOMSGS
Unterdrückt alle Informationsmeldungen mit einem Schweregrad von 0 bis 10.

STAT_HEADER | DENSITY_VECTOR | HISTOGRAMM | 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. Wird nicht unterstützt. Künftige Kompatibilität wird nicht garantiert..

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

SpaltennameDescription
NameName des Statistikobjekts.
UpdatedDatum und Uhrzeit des letzten Updates der Statistik. Die STATS_DATE Funktion ist eine alternative Möglichkeit zum Abrufen dieser Informationen.
ZeilenGesamtanzahl der Zeilen in der Tabelle oder indizierten Sicht zum Zeitpunkt des letzten Updates 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 unterStatistiken.
Rows SampledGesamtzahl 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.
SchritteAnzahl 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.
DensityBerechnet als 1 / verschiedene 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 LengthDurchschnittliche 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'. Zeichenfolge, die eine Zusammenfassungsstatistik werden getrennt vom Histogramm gespeichert und in der ersten Schlüsselspalte des statistikobjekts erstellt, wenn der Typ ist Char, Varchar, Nchar, Nvarchar, varchar(max), nvarchar(max), Text, oder Ntext..
FilterausdruckPrä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 Create Filtered Indexes. Weitere Informationen zu gefilterten Statistiken finden Sie unter Statistiken.
Unfiltered RowsGesamtzahl 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.

SpaltennameDescription
All DensityDie Dichte ist 1 / verschiedene 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 LengthDurchschnittliche 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.
SpaltenNamen 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 HISTOGRAM-Option angegeben wird.

SpaltennameDescription
RANGE_HI_KEYOberer Spaltengrenzwert für einen Histogrammschritt. Der Spaltenwert wird auch als Schlüsselwert bezeichnet.
RANGE_ROWSGeschätzte Anzahl von Zeilen, deren Spaltenwerte innerhalb eines Histogrammschritts liegen, ohne den oberen Grenzwert.
EQ_ROWSGeschätzte Anzahl von Zeilen, deren Spaltenwerte der Obergrenze des Histogrammschritts entsprechen.
DISTINCT_RANGE_ROWSGeschätzte Anzahl von Zeilen mit einem unterschiedlichen Spaltenwert innerhalb eines Histogrammschritts ohne den oberen Grenzwert.
AVG_RANGE_ROWSDurchschnittliche Anzahl von Zeilen mit doppelten Spaltenwerten in einem Histogrammschritt ohne den oberen Grenzwert (RANGE_ROWS / DISTINCT_RANGE_ROWS für DISTINCT_RANGE_ROWS > 0).

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.

Description

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

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äfixDichte 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

DBCC SHOW_STATISTICS stellt keine Statistik für räumliche oder speicheroptimierte xVelocity-columnstore-Indizes bereit.

Zum Anzeigen des statistikobjekts muss der Benutzer Besitzer der Tabelle, oder der Benutzer muss ein Mitglied der sysadmin festen Serverrolle, die db_owner festen Datenbankrolle oder der db_ddladmin festen Datenbankrolle "".

Durch SQL Server 2012 SP1 werden die Berechtigungseinschränkungen gelockert, sodass Benutzer mit SELECT-Berechtigung in der Lage sind, diesen Befehl auszuführen. Die folgenden Voraussetzungen müssen erfüllt sein, damit der Befehl erfolgreich mit SELECT-Berechtigung ausgeführt werden kann:

  • Die Benutzer benötigen eine Zugriffsberechtigung für alle Spalten im Statistikobjekt.

  • Die Benutzer benötigen eine Zugriffsberechtigung für alle Spalten in einer Filterbedingung (falls vorhanden).

  • Die Tabelle eine Sicherheitsrichtlinie auf Zeilenebene nicht möglich.

Um dieses Verhalten zu deaktivieren, verwenden Sie das Ablaufverfolgungsflag 9485.

DBCC SHOW_STATISTICS erfordert SELECT-Berechtigung für die Tabelle oder die Mitgliedschaft in einer der folgenden:

  • Feste Serverrolle sysadmin

  • feste Datenbankrolle "Db_owner"

  • feste Datenbankrolle "Db_ddladmin"

DBCC SHOW_STATISTICS Zeigt Statistiken, die in der Shell-Datenbank auf der Ebene des Steuerelements gespeichert. Werden nicht angezeigt, die von automatisch erstellten Statistiken SQL Server auf den Serverknoten.

DBCC SHOW_STATISTICS wird in externen Tabellen nicht unterstützt.

A. Zurückgeben aller Statistikinformationen

Das folgende Beispiel zeigt alle Statistikinformationen für die AK_Address_rowguid Index, der die Person.Address -Tabelle in der AdventureWorks2012 Datenbank.

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

B. Angeben der HISTOGRAM-Option

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

DBCC SHOW_STATISTICS ("Person.Address", AK_Address_rowguid) WITH HISTOGRAM;  
GO  

C. Zeigt den Inhalt der eine Statistik-Objekt

Das folgende Beispiel zeigt den Inhalt der Customer_LastName Statistiken für die DimCustomer-Tabelle.

-- Uses AdventureWorks  
  
--First, create a statistics object  
CREATE STATISTICS Customer_LastName   
ON AdventureWorksPDW2012.dbo.DimCustomer (LastName);  
GO  
DBCC SHOW_STATISTICS ("dbo.DimCustomer",Customer_LastName);  
GO  

Die Ergebnisse zeigen die Header, density_vector und Teil des Histogramms.

DBCC SHOW_STATISTICS results

D. Angeben der HISTOGRAM-Option

Dies schränkt die Statistikinformationen für den Histogrammdaten für Customer_LastName angezeigt.

DBCC SHOW_STATISTICS ("dbo.DimCustomer",Customer_LastName) WITH HISTOGRAM;  
GO  

Statistiken
Erstellen des INDEX (Transact-SQL)
CREATE STATISTICS (Transact-SQL)
DROP STATISTICS (Transact-SQL)
Sp_autostats (Transact-SQL)
Sp_createstats (Transact-SQL)
STATS_DATE (Transact-SQL)
UPDATE STATISTICS (Transact-SQL)

Community-Beiträge

HINZUFÜGEN
Anzeigen: