Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Dotyczy do: SQL Server 2016 (13.x) i nowsze wersje
Azure SQL Database
Azure SQL Managed Instance
SQL database in Microsoft Fabric
Zwraca histogram statystyk dla określonego obiektu bazy danych (tabeli lub widoku indeksowanego) w bieżącej bazie danych programu SQL Server. Podobnie jak DBCC SHOW_STATISTICS WITH HISTOGRAM.
Uwaga / Notatka
Ten DMF jest dostępny od programu SQL Server 2016 (13.x) SP1 CU2
Składnia
sys.dm_db_stats_histogram (object_id , stats_id)
Arguments
object_id
Identyfikator obiektu w bieżącej bazie danych, dla którego żądane są właściwości jednej z jego statystyk. object_id jest int.
stats_id
Identyfikator statystyk dla określonego object_id. Identyfikator statystyk można uzyskać z dynamicznego widoku zarządzania sys.stats . stats_id jest int.
Zwrócona tabela
| Nazwa kolumny | Typ danych | Description |
|---|---|---|
object_id |
int | Identyfikator obiektu (tabeli lub widoku indeksowanego), dla którego mają być zwracane właściwości obiektu statystyk. |
stats_id |
int | Identyfikator obiektu statystyk. Jest unikatowy w widoku tabeli lub indeksowanym. Aby uzyskać więcej informacji, zobacz sys.stats. |
step_number |
int | Liczba kroków w histogramie. |
range_high_key |
sql_variant | Górna wartość kolumny powiązanej dla kroku histogramu. Wartość kolumny jest również nazywana wartością klucza. |
range_rows |
prawdziwy | Szacowana liczba wierszy, których wartość kolumny mieści się w kroku histogramu, z wyłączeniem górnej granicy. |
equal_rows |
prawdziwy | Szacowana liczba wierszy, których wartość kolumny jest równa górnej granicy kroku histogramu. |
distinct_range_rows |
bigint | Szacowana liczba wierszy z unikatową wartością kolumny w kroku histogramu, z wyłączeniem górnej granicy. |
average_range_rows |
prawdziwy | Średnia liczba wierszy z zduplikowanymi wartościami kolumn w kroku histogramu, z wyłączeniem górnej granicy (RANGE_ROWS / DISTINCT_RANGE_ROWS dla DISTINCT_RANGE_ROWS > 0). |
Uwagi
Zestaw wyników zwraca sys.dm_db_stats_histogram informacje podobne do DBCC SHOW_STATISTICS WITH HISTOGRAM , a także , object_idstats_idi step_number.
Ponieważ kolumna range_high_key jest typem danych sql_variant, może być konieczne użycie CAST lub CONVERT jeśli predykat porównuje się z stałą inną niż ciąg.
Histogram
Histogram mierzy częstotliwość występowania dla każdej odrębnej wartości w zestawie danych. Optymalizator zapytań oblicza histogram na wartościach kolumn w pierwszej kolumnie klucza obiektu statystyk, wybierając wartości kolumn, statystycznie próbkując wiersze lub wykonując pełne skanowanie wszystkich wierszy w tabeli lub widoku. Jeśli histogram jest tworzony na podstawie próbkowanego zestawu wierszy, przechowywane sumy dla liczby wierszy i liczby unikatowych wartości są szacowane i nie muszą być liczbami całkowitymi.
Aby utworzyć histogram, optymalizator zapytań sortuje wartości kolumn, oblicza liczbę wartości, które pasują do każdej odrębnej wartości kolumny, a następnie agreguje wartości kolumn w maksymalnie 200 ciągłych kroków histogramu. Każdy krok zawiera zakres wartości kolumn, po którym następuje górna wartość kolumny powiązanej. Zakres zawiera wszystkie możliwe wartości kolumn między wartościami granic, z wyłączeniem samych wartości granic. Najniższa z posortowanych wartości kolumn to górna wartość granicy pierwszego kroku histogramu.
Na poniższym diagramie przedstawiono histogram z sześcioma krokami. Obszar po lewej stronie pierwszej górnej wartości granicy jest pierwszym krokiem.
Dla każdego kroku histogramu:
Linia pogrubiona reprezentuje górną wartość granicy (range_high_key) i liczbę wystąpień (equal_rows)
Lewy obszar stały range_high_key reprezentuje zakres wartości kolumn, a średnia liczba wystąpień każdej wartości kolumny (average_range_rows). Average_range_rows pierwszego kroku histogramu jest zawsze 0.
Wiersze kropkowane reprezentują próbkowane wartości używane do szacowania całkowitej liczby odrębnych wartości w zakresie (distinct_range_rows) i łącznej liczby wartości w zakresie (range_rows). Optymalizator zapytań używa range_rows i distinct_range_rows do obliczania average_range_rows i nie przechowuje przykładowych wartości.
Optymalizator zapytań definiuje kroki histogramu zgodnie z ich istotnością statystyczną. Używa maksymalnego algorytmu różnicy, aby zminimalizować liczbę kroków w histogramie, jednocześnie maksymalizując różnicę między wartościami granic. Maksymalna liczba kroków to 200. Liczba kroków histogramu może być mniejsza niż liczba unikatowych wartości, nawet w przypadku kolumn z mniej niż 200 punktami granic. Na przykład kolumna z 100 odrębnymi wartościami może zawierać histogram z mniej niż 100 punktami granic.
Permissions
Wymaga, aby użytkownik miał uprawnienia do wybierania kolumn statystyk lub użytkownik jest właścicielem tabeli lub użytkownik jest członkiem stałej roli serwera sysadmin , stałej roli bazy danych db_owner lub stałej roli bazy danych db_ddladmin stałej roli bazy danych.
Przykłady
A. Przykład podstawowy
Poniższy przykład tworzy i wypełnia podstawową tabelę. Następnie tworzy statystyki dla kolumny Region_Name .
CREATE TABLE Region
(
Region_ID INT IDENTITY PRIMARY KEY,
Region_Name VARCHAR (120) NOT NULL
);
INSERT Region (Region_Name)
VALUES ('Canada'), ('Denmark'), ('Iceland'), ('Peru');
CREATE STATISTICS Region_Stats ON Region(Region_Name);
Klucz podstawowy zajmuje stat_id numer 1, dlatego wywołaj numer sys.dm_db_stats_histogramstat_id 2, aby zwrócić histogram statystyk dla Region tabeli.
SELECT * FROM sys.dm_db_stats_histogram(OBJECT_ID('Region'), 2);
B. Przydatne zapytanie
SELECT hist.step_number,
hist.range_high_key,
hist.range_rows,
hist.equal_rows,
hist.distinct_range_rows,
hist.average_range_rows
FROM sys.stats AS s
CROSS APPLY sys.dm_db_stats_histogram(s.[object_id], s.stats_id) AS hist
WHERE s.[name] = N'<statistic_name>';
C. Przydatne zapytanie
Poniższy przykład wybiera z tabeli Region z predykatem w kolumnie Region_Name.
SELECT * FROM Region
WHERE Region_Name = 'Canada';
W poniższym przykładzie przedstawiono wcześniej utworzoną statystykę tabeli Region i kolumny Region_Name dla kroku histogramu pasującego do predykatu w powyższym zapytaniu.
SELECT ss.name,
ss.stats_id,
shr.steps,
shr.rows,
shr.rows_sampled,
shr.modification_counter,
shr.last_updated,
sh.range_rows,
sh.equal_rows
FROM sys.stats AS ss
INNER JOIN sys.stats_columns AS sc
ON ss.stats_id = sc.stats_id
AND ss.object_id = sc.object_id
INNER JOIN sys.all_columns AS ac
ON ac.column_id = sc.column_id
AND ac.object_id = sc.object_id
CROSS APPLY sys.dm_db_stats_properties(ss.object_id, ss.stats_id) AS shr
CROSS APPLY sys.dm_db_stats_histogram(ss.object_id, ss.stats_id) AS sh
WHERE ss.[object_id] = OBJECT_ID('Region')
AND ac.name = 'Region_Name'
AND sh.range_high_key = CAST ('Canada' AS CHAR (8));