Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Şunlar için geçerlidir: SQL Server 2016 (13.x) ve sonraki sürümler
Azure SQL Database
Azure SQL Managed Instance
SQL database in Microsoft Fabric
Geçerli SQL Server veritabanında belirtilen veritabanı nesnesi (tablo veya dizinli görünüm) için istatistik histogramını döndürür. Şunun gibi DBCC SHOW_STATISTICS WITH HISTOGRAM.
Uyarı
Bu DMF, SQL Server 2016 (13.x) SP1 CU2 ile başlayarak kullanılabilir
Sözdizimi
sys.dm_db_stats_histogram (object_id , stats_id)
Arguments
object_id
Geçerli veritabanında istatistiklerinden birinin özelliklerinin istendiği nesnenin kimliği. object_idint.
stats_id
Belirtilen object_id için istatistiklerin kimliği. İstatistik kimliği sys.stats dinamik yönetim görünümünden alınabilir. stats_idint.
Tablo döndürüldü
| Sütun adı | Veri türü | Description |
|---|---|---|
object_id |
int | İstatistik nesnesinin özelliklerinin döndürüleceği nesnenin kimliği (tablo veya dizinli görünüm). |
stats_id |
int | İstatistik nesnesinin kimliği. Tablo veya dizinli görünüm içinde benzersizdir. Daha fazla bilgi için bkz. sys.stats. |
step_number |
int | Histogramdaki adım sayısı. |
range_high_key |
sql_variant | Histogram adımı için üst sınır sütun değeri. Sütun değeri anahtar değeri olarak da adlandırılır. |
range_rows |
gerçek | Sütun değeri histogram adımında olan ve üst sınır hariç olan tahmini satır sayısı. |
equal_rows |
gerçek | Sütun değeri histogram adımının üst sınırına eşit olan tahmini satır sayısı. |
distinct_range_rows |
bigint | Histogram adımında, üst sınır hariç ayrı sütun değerine sahip tahmini satır sayısı. |
average_range_rows |
gerçek | Histogram adımında yinelenen sütun değerlerine sahip ortalama satır sayısı( içinRANGE_ROWS / DISTINCT_RANGE_ROWS) üst sınırDISTINCT_RANGE_ROWS > 0 hariç. |
Açıklamalar
için sys.dm_db_stats_histogram sonuç kümesi , ve gibi DBCC SHOW_STATISTICS WITH HISTOGRAM bilgileri döndürür ve object_idiçerirstats_idstep_number.
Sütun range_high_key bir sql_variant veri türü olduğundan, bir koşul dize olmayan sabitle karşılaştırma yaparsa veya CAST kullanmanız CONVERT gerekebilir.
Histogram Grafiği
Histogram, bir veri kümesindeki her ayrı değer için oluşum sıklığını ölçer. Sorgu iyileştiricisi, istatistik nesnesinin ilk anahtar sütunundaki sütun değerleri üzerinde bir histogram hesaplar, satırlarda istatistiksel örnekleme yaparak veya tablodaki veya görünümdeki tüm satırların tam taramasını yaparak sütun değerlerini seçer. Histogram örneklenmiş bir satır kümesinden oluşturulduysa, satır sayısı ve ayrı değer sayısı için depolanan toplamlar tahmindir ve tamsayı olması gerekmez.
Histogramı oluşturmak için sorgu iyileştiricisi sütun değerlerini sıralar, her ayrı sütun değeriyle eşleşen değerlerin sayısını hesaplar ve sonra sütun değerlerini en fazla 200 bitişik histogram adımında toplar. Her adım, bir sütun değerleri aralığı ve ardından bir üst sınır sütun değeri içerir. Aralık, sınır değerlerinin kendileri hariç, sınır değerleri arasındaki tüm olası sütun değerlerini içerir. Sıralanmış sütun değerlerinin en alt kısmı, ilk histogram adımının üst sınır değeridir.
Aşağıdaki diyagramda altı adımlı bir histogram gösterilmektedir. İlk üst sınır değerinin solundaki alan ilk adımdır.
Her histogram adımı için:
Kalın çizgi, üst sınır değerini (range_high_key) ve oluşma sayısını (equal_rows) temsil eder
range_high_key'nin düz alanı, sütun değerleri aralığını ve her sütun değerinin ortalama kaç kez gerçekleştiğini (average_range_rows) temsil eder. İlk histogram adımının average_range_rows her zaman 0'dır.
Noktalı çizgiler, aralıktaki benzersiz değerlerin toplam sayısını (distinct_range_rows) ve aralıktaki toplam değer sayısını (range_rows) tahmin etmek için kullanılan örneklenmiş değerleri temsil eder. Sorgu iyileştiricisi , average_range_rows hesaplamak için range_rows ve distinct_range_rows kullanır ve örneklenen değerleri depolamaz.
Sorgu iyileştiricisi histogram adımlarını istatistiksel anlamlarına göre tanımlar. Sınır değerleri arasındaki farkı en üst düzeye çıkarırken histogramdaki adım sayısını en aza indirmek için maksimum fark algoritması kullanır. Adım sayısı üst sınırı 200'dür. Histogram adımlarının sayısı, 200'den az sınır noktasına sahip sütunlar için bile farklı değerlerin sayısından daha az olabilir. Örneğin, 100 ayrı değeri olan bir sütunda 100'den az sınır noktası içeren bir histogram olabilir.
Permissions
Kullanıcının istatistik sütunlarında belirli izinlere sahip olmasını veya tablonun sahibi veya kullanıcının sysadmin sabit sunucu rolünün, db_owner sabit veritabanı rolünün veya db_ddladmin sabit veritabanı rolünün üyesi olmasını gerektirir.
Örnekler
A. Temel örnek
Aşağıdaki örnek temel bir tablo oluşturur ve doldurur. Ardından sütunda Region_Name istatistikler oluşturur.
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);
Birincil anahtar 1 numarayı kaplarstat_id, bu nedenle tablonun istatistik histogramını döndürmek için sys.dm_db_stats_histogram 2 numaralı numarayı çağırın stat_idRegion.
SELECT * FROM sys.dm_db_stats_histogram(OBJECT_ID('Region'), 2);
B. Yararlı sorgu
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. Yararlı sorgu
Aşağıdaki örnek, sütununda Regionkoşulu olan tablodan Region_Name öğesini seçer.
SELECT * FROM Region
WHERE Region_Name = 'Canada';
Aşağıdaki örnekte yukarıdaki sorgudaki koşulla eşleşen histogram adımı için tablo Region ve sütunda Region_Name daha önce oluşturulmuş istatistikler yer alır.
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));
İlgili içerik
- DBCC SHOW_STATISTICS (Transact-SQL)
- Nesneyle İlgili Dinamik Yönetim Görünümleri ve İşlevleri (Transact-SQL)
- sys.dm_db_stats_properties (Transact-SQL)