Tworzenie statystyk (Transact-SQL)
Tworzy kwerendę optymalizacji statystyki, łącznie z filtrowanym statystyki dotyczące jednej lub kilku kolumn tabela lub indeksowany widok.Większość kwerend optymalizator kwerendy już generuje niezbędne dane statystyczne dla planu kwerend wysokiej jakości; w niektórych przypadkach należy utworzyć dodatkowe statystyki ze STATYSTYKAMI utworzyć lub zmodyfikować projekt kwerendy, aby poprawić wydajność kwerendy.
Filtrowane statystyki można zwiększyć wydajność kwerendy dla kwerend, które wybierać wyraźnie określone podzbiory danych.Filtrowanych danych statystycznych Użyj predykat filtru w klauzula WHERE, aby wybrać podzbiór danych zawartych w statystykach.Tworzenie statystyk można użyć tempdb do sortowania próbki wierszy dla tworzenia statystyk.
Aby uzyskać więcej informacji o danych statystycznych, w tym, kiedy należy używać do tworzenia statystyk zobacz Aby poprawić wydajność kwerendy przy użyciu statystyk.
Składnia
CREATE STATISTICS statistics_name
ON { table_or_indexed_view_name } ( column [ ,...n ] )
[ WHERE <filter_predicate> ]
[ WITH
[ [ FULLSCAN
| SAMPLE number { PERCENT | ROWS }
| STATS_STREAM = stats_stream ] [ , ] ]
[ NORECOMPUTE ]
] ;
<filter_predicate> ::=
<conjunct> [AND <conjunct>]
<conjunct> ::=
<disjunct> | <comparison>
<disjunct> ::=
column_name IN (constant ,…)
<comparison> ::=
column_name <comparison_op> constant
<comparison_op> ::=
IS | IS NOT | = | <> | != | > | >= | !> | < | <= | !<
Argumenty
statistics_name
Jest to nazwa statystyki do utworzenia.table_or_indexed_view_name
Jest nazwą tabela lub indeksowany widok do tworzenia statystyk na.Statystyki mogą być tworzone na tabele lub indeksowania widoków w innej bazie danych przez określenie nazwy kwalifikowanej tabela .column [ ,…n]
Określa klucz kolumna lub listę kolumn klucz do tworzenia statystyk na.Można określić dowolnej kolumna może być określona jako kluczindeksukolumna z następującymi wyjątkami:xml, nie można określić pełnego tekstu i kolumn FILESTREAM.
Obliczane kolumny można określić tylko jeśli ustawienia bazy danych ARITHABORT i QUOTED_IDENTIFIER są dalej.
zdefiniowany przez użytkownika typ CLR kolumny może być określony, jeśli typ obsługuje binarne zamawiania.Obliczone kolumn zdefiniowanych jako wywołania metoda typ zdefiniowany przez użytkownika kolumna może być określony, jeśli metody są oznaczone firmy Deterministic Networks.Aby uzyskać więcej informacji o tworzeniu kolumn zdefiniowany przez użytkownika typ CLR , zobacz Praca z CLR typów zdefiniowanych przez użytkownika.
Maksymalny dozwolony rozmiar wartości połączona kolumna jest 900 bajtów.
W przypadku gdy <filter_predicate>
Określa wyrażenie wybierania podzbiór wierszy do uwzględnienia podczas tworzenia obiektu statystyki.Statystyki, które są tworzone z predykat filtr nazywane są filtrowane dane statystyczne.Filtr predykat Logika porównywania prostego zastosowania i nie można odwoływać się kolumnaobliczana, UDT kolumna, typ dane przestrzenne kolumna, lub hierarchyID Typ danych kolumna.Operatory porównania porównań za pomocą literałów wartości NULL są niedozwolone.Zamiast tego należy używać operatorów jest puste i nie jest NULL.Oto kilka przykładów predykaty filtru dla Production.BillOfMaterialswtabela:
WHERE StartDate > '20040101' AND EndDate <= '20040630'
WHERE ComponentID IN (533, 324, 753)
WHERE StartDate IN ('20040404', '20040905') AND EndDate IS NOT NULL
Aby uzyskać więcej informacji dotyczących filtru predykatów, zobacz Filtrowane wskazówek indeksu.
FULLSCAN
Obliczanie statystyk przez skanowanie wszystkich wierszy w tabela lub indeksowany widok.FULLSCAN i próbce 100 procent mają takie same wyniki.FULLSCAN nie można używać z opcją próbki.PRÓBKI number {procent | WIERSZE}
Określa przybliżona wartość procentowa lub liczba wierszy w tabela lub indeksowany widok dla optymalizator kwerendy używać podczas tworzenia statystyk.Wartości procentowej number może być z zakresu od 0 do 100 i wierszy, number może być z zakresu od 0 do całkowitej liczby wierszy.Rzeczywista wartość procentową lub liczbę wierszy próbek optymalizator kwerendy mogą być niezgodne procent lub o określonym numerze.Na przykład optymalizator kwerendy skanowanie wszystkich wierszy danych strona.PRÓBKA jest przydatne do specjalnych przypadków, w których nie jest optymalny plan kwerend na podstawie domyślnej próbkowanie.W większości przypadków nie jest konieczne określenie próbki, ponieważ już optymalizator kwerendy używa próbkowanie i określa rozmiar statystycznie znaczenie próbka domyślnie wymagane do tworzenia planów kwerend wysokiej jakości.
PRÓBKI nie można używać z opcją FULLSCAN.Po określeniu próbki ani FULLSCAN optymalizator kwerendy używa danych włączonych do próby statystycznej i oblicza rozmiar próbki domyślnie.
Zaleca się określenie 0 procent lub 0 wierszy.Po określeniu 0 procent lub wierszy obiektu statystyk jest tworzony, ale nie zawiera danych statystyk.
NORECOMPUTE
Wyłącz automatyczne statystyki aktualizację dla opcji AUTO_STATISTICS_UPDATE, statistics_name.Jeżeli określono tę opcję optymalizator kwerendy zakończy wszystkie aktualizacje w toku statystyki dla statistics_name i wyłączyć przyszłych aktualizacji.Aby ponownie włączyć aktualizacji statystyk, usuń statystyki z DROP statystyki , a następnie uruchomić tworzenia statystyk bez opcji NORECOMPUTE.
Przestroga Za pomocą tej opcji może spowodować planów kwerend utratę jakości.Zaleca się użycie tej opcji należy oszczędnie, a następnie tylko przez kwalifikowaną administrator systemu.
Aby uzyskać więcej informacji dotyczących opcji AUTO_STATISTICS_UPDATE, zobacz ZMIENIA opcje zestawu bazy danych (Transact-SQL).Aby uzyskać więcej informacji dotyczących wyłączania i ponownego włączania aktualizacji statystyk, zobacz Aby poprawić wydajność kwerendy przy użyciu statystyk.
STATS_STREAM **=**stats_stream
Określone tylko w celach informacyjnych. Nieobsługiwane. Przyszła zgodność nie jest gwarantowana.
Uwagi
Poniższa tabela podaje maksymalnej liczby dla kategorii odnoszących się do statystyk.
Kategoria statystyki |
Maksimum |
---|---|
Kolumny na obiekt statystyki |
32 |
Statystyki tworzone na indeksy |
1 na indeks i 1000 na tabela |
Statystyki tworzone w kolumnach |
30 000 na tabela |
Kiedy używać tworzenie statystyk
Aby uzyskać więcej informacji o tym, kiedy należy używać do tworzenia statystyk, zobacz Aby poprawić wydajność kwerendy przy użyciu statystyk.
Odwoływanie się do zależności dla filtrowanych danych statystycznych
Sys.sql_expression_dependencies widok wykazu śledzi każdej kolumna w predykacie filtrowanych danych statystycznych jako odwołujący się zależność.Należy wziąć pod uwagę operacje, które należy wykonać na kolumny w tabela przed utworzeniem filtrowanych danych statystycznych, ponieważ nie można upuścić, Zmień nazwę lub zmieniać definicji tabela kolumna zdefiniowanej w predykacie filtrowanych danych statystycznych.
Uprawnienia
Aby utworzyć statystyki, użytkownik musi być właścicielem tabela lub indeksowany widok lub użytkownik musi być element członkowski jednej z następujących ról: sysadmin stała rola serwera db_owner stałej rola bazy danychlub db_ddladmin stałej rola bazy danych.
Przykłady
A.Tworzenie statystyk przy użyciu liczebność procent
Poniższy przykład tworzy ContactMail1 statystyk, przy użyciu losowo 5 procent BusinessEntityID i EmailAddress kolumny Person tabela AdventureWorks2008R2 bazy danych.
USE AdventureWorks2008R2;
GO
CREATE STATISTICS ContactMail1
ON Person.Person (BusinessEntityID, EmailPromotion)
WITH SAMPLE 5 PERCENT;
B.Za pomocą tworzenia statystyk z FULLSCAN i NORECOMPUTE
Poniższy przykład tworzy ContactMail2 statystykę dla wszystkich wierszy w BusinessEntityID i EmailAddress kolumny Person tabela i wyłącza automatyczne recomputing statystyk.
CREATE STATISTICS NamePurchase
ON AdventureWorks2008R2.Person.Person (BusinessEntityID, EmailPromotion)
WITH FULLSCAN, NORECOMPUTE;
C.Tworzenie statystyk filtrowane przy użyciu tworzenia statystyk
Poniższy przykład tworzy filtrowane statystyki ContactPromotion1.Aparat baz danych Próbki 50 procent danych i wybiera wiersze z EmailPromotion równą 2.
USE AdventureWorks2008R2;
GO
IF EXISTS (SELECT name FROM sys.stats
WHERE name = N'ContactPromotion1'
AND object_id = OBJECT_ID(N'Person.Person'))
DROP STATISTICS Person.Person.ContactPromotion1
GO
CREATE STATISTICS ContactPromotion1
ON Person.Person (BusinessEntityID, LastName, EmailPromotion)
WHERE EmailPromotion = 2
WITH SAMPLE 50 PERCENT;
GO