Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Berlaku untuk: SQL Server 2016 (13.x) dan versi
yang lebih baru Azure SQL Database
Azure SQL Managed Instance SQL database
di Microsoft Fabric
Mengembalikan histogram statistik untuk objek database yang ditentukan (tabel atau tampilan terindeks) dalam database SQL Server saat ini. Mirip dengan DBCC SHOW_STATISTICS WITH HISTOGRAM.
Catatan
DMF ini tersedia dimulai dengan SQL Server 2016 (13.x) SP1 CU2
Sintaks
sys.dm_db_stats_histogram (object_id , stats_id)
Argumen
object_id
ID objek dalam database saat ini tempat properti salah satu statistiknya diminta. object_id int.
stats_id
ID statistik untuk object_id yang ditentukan. ID statistik dapat diperoleh dari tampilan manajemen dinamis sys.stats . stats_id int.
Tabel dikembalikan
| Nama kolom | Jenis data | Deskripsi |
|---|---|---|
object_id |
int | ID objek (tabel atau tampilan terindeks) untuk mengembalikan properti objek statistik. |
stats_id |
int | ID objek statistik. Unik dalam tabel atau tampilan terindeks. Untuk informasi selengkapnya, lihat sys.stats. |
step_number |
int | Jumlah langkah dalam histogram. |
range_high_key |
aql_variant | Nilai kolom terikat atas untuk langkah histogram. Nilai kolom juga disebut nilai kunci. |
range_rows |
real | Perkiraan jumlah baris yang nilai kolomnya berada dalam langkah histogram, tidak termasuk batas atas. |
equal_rows |
real | Perkiraan jumlah baris yang nilai kolomnya sama dengan batas atas langkah histogram. |
distinct_range_rows |
bigint | Perkiraan jumlah baris dengan nilai kolom yang berbeda dalam langkah histogram, tidak termasuk batas atas. |
average_range_rows |
real | Jumlah rata-rata baris dengan nilai kolom duplikat dalam langkah histogram, tidak termasuk batas atas (RANGE_ROWS / DISTINCT_RANGE_ROWS untuk DISTINCT_RANGE_ROWS > 0). |
Keterangan
Hasil untuk sys.dm_db_stats_histogram mengembalikan informasi yang mirip DBCC SHOW_STATISTICS WITH HISTOGRAM dengan dan juga mencakup object_id, , stats_iddan step_number.
Karena kolom range_high_key adalah jenis data sql_variant, Anda mungkin perlu menggunakan CAST atau CONVERT jika predikat melakukan perbandingan dengan konstanta non-string.
Histogram
Histogram mengukur frekuensi kemunculan untuk setiap nilai yang berbeda dalam himpunan data. Pengoptimal kueri menghitung histogram pada nilai kolom di kolom kunci pertama objek statistik, memilih nilai kolom dengan mengambil sampel baris secara statistik atau dengan melakukan pemindaian penuh semua baris dalam tabel atau tampilan. Jika histogram dibuat dari sekumpulan baris sampel, total yang disimpan untuk jumlah baris dan jumlah nilai yang berbeda adalah perkiraan dan tidak perlu berupa bilangan bulat utuh.
Untuk membuat histogram, pengoptimal kueri mengurutkan nilai kolom, menghitung jumlah nilai yang cocok dengan setiap nilai kolom yang berbeda lalu menggabungkan nilai kolom ke dalam maksimal 200 langkah histogram berdekatan. Setiap langkah menyertakan rentang nilai kolom diikuti dengan nilai kolom terikat atas. Rentang ini mencakup semua nilai kolom yang mungkin di antara nilai batas, tidak termasuk nilai batas itu sendiri. Nilai kolom terendah yang diurutkan adalah nilai batas atas untuk langkah histogram pertama.
Diagram berikut menunjukkan histogram dengan enam langkah. Area di sebelah kiri nilai batas atas pertama adalah langkah pertama.
Untuk setiap langkah histogram:
Garis tebal mewakili nilai batas atas (range_high_key) dan berapa kali terjadi (equal_rows)
Area solid kiri range_high_key mewakili rentang nilai kolom dan jumlah rata-rata setiap nilai kolom terjadi (average_range_rows). Average_range_rows untuk langkah histogram pertama selalu 0.
Garis putus-putus mewakili nilai sampel yang digunakan untuk memperkirakan jumlah total nilai yang berbeda dalam rentang (distinct_range_rows) dan jumlah total nilai dalam rentang (range_rows). Pengoptimal kueri menggunakan range_rows dan distinct_range_rows untuk menghitung average_range_rows dan tidak menyimpan nilai sampel.
Pengoptimal kueri menentukan langkah-langkah histogram sesuai dengan signifikansi statistiknya. Ini menggunakan algoritma perbedaan maksimum untuk meminimalkan jumlah langkah dalam histogram sambil memaksimalkan perbedaan antara nilai batas. Jumlah maksimum langkah adalah 200. Jumlah langkah histogram dapat kurang dari jumlah nilai yang berbeda, bahkan untuk kolom dengan kurang dari 200 titik batas. Misalnya, kolom dengan 100 nilai berbeda dapat memiliki histogram dengan kurang dari 100 titik batas.
Izin
Mengharuskan pengguna memilih izin pada kolom statistik atau pengguna memiliki tabel atau pengguna adalah anggota peran server tetap sysadmin , peran database tetap db_owner , atau peran database tetap db_ddladmin .
Contoh
J. Contoh dasar
Contoh berikut membuat dan mengisi tabel dasar. Kemudian membuat statistik pada Region_Name kolom.
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);
Kunci primer menempati stat_id nomor 1, jadi panggil sys.dm_db_stats_histogramstat_id nomor 2, untuk mengembalikan histogram statistik untuk Region tabel.
SELECT * FROM sys.dm_db_stats_histogram(OBJECT_ID('Region'), 2);
B. Kueri yang berguna
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. Kueri yang berguna
Contoh berikut memilih dari tabel Region dengan predikat pada kolom Region_Name.
SELECT * FROM Region
WHERE Region_Name = 'Canada';
Contoh berikut melihat statistik yang dibuat sebelumnya pada tabel Region dan kolom Region_Name untuk langkah histogram yang cocok dengan predikat dalam kueri di atas.
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));