CREATE STATISTICS (Transact-SQL)
Erstellt ein Histogramm und zugeordnete Dichtegruppen (Auflistungen) über die bereitgestellte Spalte oder Spaltengruppe einer Tabelle oder einer indizierten Sicht. Statistiken über Zusammenfassungen von Zeichenfolgen werden auch für Statistiken erstellt, die für char-, varchar-, varchar(max)-, nchar-, nvarchar-, nvarchar(max)-, text- und ntext-Spalten erstellt werden. Der Abfrageoptimierer verwendet diese statistischen Informationen, um den effizientesten Abfrageplan zum Abrufen oder Aktualisieren von Daten auszuwählen. Mithilfe aktueller Statistiken kann der Abfrageoptimierer die Kosten verschiedener Abfragepläne genau abschätzen und einen hochwertigen Plan auswählen. Weitere Informationen zu Statistiken in SQL Server 2005 finden Sie unter Statistics Used by the Query Optimizer in Microsoft SQL Server 2005 auf Microsoft TechNet.
Transact-SQL-Syntaxkonventionen
Syntax
CREATE STATISTICS statistics_name
ON { table | view } ( column [ ,...n ] )
[ WITH
[ [ FULLSCAN
| SAMPLE number { PERCENT | ROWS }
| STATS_STREAM = stats_stream ] [ , ] ]
[ NORECOMPUTE ]
] ;
Argumente
- statistics_name
Der Name der zu erstellenden Statistikgruppe. Statistiknamen müssen den Regeln für Bezeichner entsprechen und müssen eindeutig in der Tabelle oder Sicht sein, in der sie erstellt werden.
- table
Der Name der Tabelle, für die die benannten Statistiken erstellt werden sollen. Tabellennamen müssen den Regeln für Bezeichner entsprechen. table ist die Tabelle, zu der column gehört. Das Angeben des Tabellenbesitzernamens ist optional. Statistiken können für Tabellen, die sich in einer anderen Datenbank befinden, erstellt werden, indem der gekennzeichnete Name der Tabelle angegeben wird.
- view
Der Name der Sicht, für die die benannte Statistik erstellt werden soll. Eine Sicht muss über einen gruppierten Index verfügen, bevor Statistiken für sie erstellt werden können. Sichtnamen müssen den Regeln für Bezeichner entsprechen. view ist die Sicht, zu der column gehört. Die Angabe des Sichtbesitzernamens ist optional. Statistiken können für Sichten, die sich in einer anderen Datenbank befinden, erstellt werden, indem der gekennzeichnete Name der Sicht angegeben wird.
column
Die Spalte oder Spaltengruppe, für die die Statistik erstellt werden soll. Jede Spalte, die als ein Indexschlüssel angegeben werden kann, kann auch für Statistiken angegeben werden. Jedoch gelten die folgenden Ausnahmen:- xml-Spalten können nicht angegeben werden.
- Die maximal zulässige Größe der kombinierten Spaltenwerte darf die 900-Byte-Grenze überschreiten, die für den Indexschlüsselwert gilt.
Berechnete Spalten können nur angegeben werden, wenn die Datenbankoptionen ARITHABORT und QUOTED_IDENTIFIER auf ON festgelegt sind. CLR-benutzerdefinierte Typspalten können angegeben werden, wenn der Typ die binäre Reihenfolge unterstützt. Berechnete Spalten, die als Methodenaufrufe einer benutzerdefinierten Typspalte definiert sind, können angegeben werden, wenn die Methoden als deterministisch gekennzeichnet sind. Weitere Informationen zum Erstellen von CLR-benutzerdefinierten Typspalten finden Sie unter Arbeiten mit CLR-benutzerdefinierten Typen.
- FULLSCAN
Gibt an, dass alle Zeilen in table oder view gelesen werden sollen, um die Statistik zusammenzustellen. Das Angeben von FULLSCAN hat die gleiche Wirkung wie SAMPLE 100 PERCENT. Diese Option kann nicht mit der Option SAMPLE verwendet werden.
SAMPLE number { PERCENT | ROWS }
Gibt an, dass ein bestimmter Prozentsatz der Daten oder eine festgelegte Anzahl von Zeilen als zufällige Stichprobe gelesen werden soll, um die Statistik zusammenzustellen. number kann nur eine ganze Zahl sein. Falls PERCENT angegeben ist, sollte number eine Zahl zwischen 0 und 100 sein; falls ROWS angegeben ist, kann number eine Zahl zwischen 0 und der Gesamtzahl an Zeilen n sein.In SQL Server 2005-Datenbankmodul wird sichergestellt, dass eine Mindestanzahl von Werten als Stichprobe verwendet wird, um eine sinnvolle Statistik sicherzustellen. 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. Es wird eine Mindestzahl von ungefähr 1.000 Datenseiten als Stichprobe verwendet. Werden von PERCENT, ROWS oder number mehr Werte zurückgegeben, als für eine aussagekräftige Stichprobe erforderlich sind, versucht Datenbankmodul, diese dem angeforderten Stichprobenumfang anzupassen. Es kann allerdings sein, dass die tatsächliche Stichprobengröße nicht der angegebenen Größe entspricht, da Stichproben entnommen werden, indem vollständige Datenseiten gescannt werden. Wenn 0 PERCENT oder ROWS angegeben ist, ist das Ergebnis ein leerer Satz von Statistiken.
SAMPLE kann nicht in Verbindung mit der Option FULLSCAN verwendet werden. Datenbankmodul berechnet eine automatische Stichprobe, wenn SAMPLE oder FULLSCAN nicht angegeben ist.
NORECOMPUTE
Gibt an, dass Statistiken nicht automatisch von Datenbankmodul neu berechnet werden sollen. Wenn diese Option angegeben ist, werden zuvor erstellte (alte) Statistiken von Datenbankmodul weiter verwendet, auch wenn sich die Daten geändert haben. Die Statistiken werden von Datenbankmodul nicht automatisch aktualisiert und verwaltet. Dies kann zu nicht optimalen Plänen führen.Vorsicht: Es wird die begrenzte Verwendung dieser Option empfohlen, die nur einem qualifizierten Systemadministrator vorbehalten sein sollte.
- STATS_STREAM **=**stats_stream
Diese Syntax ist nur für die interne Verwendung bestimmt und wird nicht unterstützt. Microsoft behält sich das Recht vor, diese Syntax zu einem beliebigen Zeitpunkt zu ändern.
Hinweise
Nur der Tabellenbesitzer kann Statistiken für diese Tabelle erstellen. Der Besitzer einer Tabelle kann jederzeit eine Statistikgruppe (Auflistung) erstellen, unabhängig davon, ob sich Daten in der Tabelle befinden.
Wenn die Datenbankoption AUTO_UPDATE_STATISTICS auf ON festgelegt ist (dies ist die Standardeinstellung), und die NORECOMPUTE-Klausel ist nicht angegeben, werden automatisch alle manuell erstellten Statistiken von Datenbankmodul aktualisiert.
CREATE STATISTICS kann in einer indizierten Sicht ausgeführt werden. Statistiken für indizierte Sichten werden nur dann vom Abfrageoptimierer verwendet, wenn in der Abfrage direkt auf die Sicht verwiesen wird und der NOEXPAND-Hinweis für die Sicht angegeben ist. Andernfalls werden Statistiken aus den zugrunde liegenden Tabellen abgeleitet, bevor die indizierte Sicht im Abfrageplan ersetzt wird. Diese Ersetzung wird nur in der Developer und Enterprise Edition von Microsoft SQL Server 2005 unterstützt.
Berechtigungen
Erfordert die ALTER-Berechtigung auf der Tabelle oder Sicht.
Beispiele
A. Verwenden von CREATE STATISTICS mit SAMPLE number PERCENT
Im folgenden Beispiel wird die ContactMail1
-Statistikgruppe (Auflistung) erstellt. Hier wird eine zufällige Stichprobenstatistik auf Basis von 5 % der ContactID
- und EmailAddress
-Spalten der Contact
-Tabelle der AdventureWorks
-Datenbank berechnet.
USE AdventureWorks;
GO
CREATE STATISTICS ContactMail1
ON Person.Contact (ContactID, EmailAddress)
WITH SAMPLE 5 PERCENT;
B. Verwenden von CREATE STATISTICS mit FULLSCAN und NORECOMPUTE
Im folgenden Beispiel wird die ContactMail2
-Statistikgruppe (Auflistung) erstellt. Hier werden Statistiken für alle Zeilen in den ContactID
- und EmailAddress
-Spalten der Contact
-Tabelle berechnet. Dabei wird die automatische Neuberechnung von Statistiken deaktiviert.
CREATE STATISTICS NamePurchase
ON AdventureWorks.Person.Contact (ContactID, EmailAddress)
WITH FULLSCAN, NORECOMPUTE;
Siehe auch
Verweis
ALTER DATABASE (Transact-SQL)
CREATE INDEX (Transact-SQL)
DBCC SHOW_STATISTICS (Transact-SQL)
DROP STATISTICS (Transact-SQL)
sys.stats (Transact-SQL)
sys.stats_columns (Transact-SQL)
sp_autostats (Transact-SQL)
sp_createstats (Transact-SQL)
UPDATE STATISTICS (Transact-SQL)
EVENTDATA (Transact-SQL)