SHOW_STATISTICS DBCC (Transact-SQL)
Berlaku untuk:
SQL Server (semua versi yang didukung)
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics Analytics
Platform System (PDW)
DBCC SHOW_STATISTICS menampilkan statistik pengoptimalan kueri saat ini untuk tabel atau tampilan terindeks. Pengoptimal kueri menggunakan statistik untuk memperkirakan kardinalitas atau jumlah baris dalam hasil kueri, yang memungkinkan Pengoptimal Kueri membuat rencana kueri berkualitas tinggi. Misalnya, Pengoptimal Kueri dapat menggunakan perkiraan kardinalitas untuk memilih operator pencarian indeks alih-alih operator pemindaian indeks dalam rencana kueri, meningkatkan performa kueri dengan menghindari pemindaian indeks intensif sumber daya.
Pengoptimal Kueri menyimpan statistik untuk tabel atau tampilan terindeks dalam objek statistik. Untuk tabel, objek statistik dibuat pada indeks atau daftar kolom tabel. Objek statistik mencakup header dengan metadata tentang statistik, histogram dengan distribusi nilai di kolom kunci pertama objek statistik, dan vektor kepadatan untuk mengukur korelasi lintas kolom. Mesin Database dapat menghitung perkiraan kardinalitas dengan salah satu data dalam objek statistik. Untuk informasi selengkapnya, lihat Statistik dan Estimasi Kardinalitas (SQL Server).
DBCC SHOW_STATISTICS menampilkan header, histogram, dan vektor kepadatan berdasarkan data yang disimpan dalam objek statistik. Sintaks memungkinkan Anda menentukan tabel atau tampilan terindeks bersama dengan nama indeks target, nama statistik, atau nama kolom.
Pembaruan penting dalam versi SQL Server sebelumnya:
Mulai dari SQL Server 2012 (11.x) SP1, tampilan manajemen dinamis sys.dm_db_stats_properties tersedia untuk mengambil informasi header yang terprogram yang terkandung dalam objek statistik untuk statistik non-inkremental.
Mulai dari SQL Server 2014 (12.x) SP2 dan SQL Server 2012 (11.x) SP1, tampilan manajemen dinamis sys.dm_db_incremental_stats_properties tersedia untuk mengambil informasi header secara terprogram yang terkandung dalam objek statistik untuk statistik inkremental.
Mulai dari SQL Server 2016 (13.x) SP1 CU2, tampilan manajemen dinamis sys.dm_db_stats_histogram tersedia untuk secara terprogram mengambil informasi histogram yang terkandung dalam objek statistik.
Sintaks
-- Syntax for SQL Server and Azure SQL Database
DBCC SHOW_STATISTICS ( table_or_indexed_view_name , target )
[ WITH [ NO_INFOMSGS ] < option > [ , n ] ]
< option > :: =
STAT_HEADER | DENSITY_VECTOR | HISTOGRAM | STATS_STREAM
-- Syntax for Azure Synapse Analytics and Parallel Data Warehouse
DBCC SHOW_STATISTICS ( table_name , target )
[ WITH { STAT_HEADER | DENSITY_VECTOR | HISTOGRAM } [ ,...n ] ]
[;]
Catatan
Sintaks ini tidak didukung oleh kumpulan SQL tanpa server di Azure Synapse Analytics.
Catatan
Untuk melihat sintaks Transact-SQL untuk SQL Server 2014 dan yang lebih lama, lihat Dokumentasi versi sebelumnya.
Argumen
table_or_indexed_view_name
Nama tabel atau tampilan terindeks untuk menampilkan informasi statistik.
table_name
Nama tabel yang berisi statistik yang akan ditampilkan. Tabel tidak boleh berupa tabel eksternal.
target
Nama indeks, statistik, atau kolom untuk menampilkan informasi statistik. target diapit dalam tanda kurung siku, tanda kutip tunggal, tanda kutip ganda, atau tanpa tanda kutip. Jika target adalah nama indeks atau statistik yang ada pada tabel atau tampilan terindeks, informasi statistik tentang target ini dikembalikan. Jika target adalah nama kolom yang sudah ada, dan objek statistik yang dibuat secara otomatis pada kolom ini ada, informasi tentang statistik yang dibuat secara otomatis tersebut dikembalikan. Jika statistik yang dibuat secara otomatis tidak ada untuk target kolom, pesan kesalahan 2767 dikembalikan.
Di Azure Synapse Analytics dan Analytics Platform System (PDW), target tidak boleh berupa nama kolom.
NO_INFOMSGS
Menekan semua pesan informasi yang memiliki tingkat keparahan dari 0 hingga 10.
STAT_HEADER | DENSITY_VECTOR | HISTOGRAM | STATS_STREAM [ ,n ]
Menentukan satu atau beberapa opsi ini membatasi kumpulan hasil yang dikembalikan oleh pernyataan ke opsi atau opsi yang ditentukan. Jika tidak ada opsi yang ditentukan, semua informasi statistik dikembalikan.
STATS_STREAM Diidentifikasi hanya untuk tujuan informasi. Tidak didukung. Kompatibilitas di masa mendatang tidak dijamin.
Tataan Hasil
Tabel berikut ini menjelaskan kolom yang dikembalikan dalam tataan hasil saat STAT_HEADER ditentukan.
| Nama kolom | Deskripsi |
|---|---|
| Nama | Nama objek statistik. |
| Diperbarui | Tanggal dan waktu statistik terakhir diperbarui. Fungsi STATS_DATE adalah cara alternatif untuk mengambil informasi ini. Untuk informasi selengkapnya, lihat bagian Keterangan di halaman ini. |
| Baris | Jumlah total baris dalam tabel atau tampilan terindeks saat statistik terakhir diperbarui. Jika statistik difilter atau sesuai dengan indeks yang difilter, jumlah baris mungkin kurang dari jumlah baris dalam tabel. Untuk informasi selengkapnya, lihat Statistik. |
| Baris Diambil Sampelnya | Jumlah total baris yang diambil sampelnya untuk perhitungan statistik. Jika Baris Sampel < Baris, histogram dan hasil kepadatan yang ditampilkan adalah perkiraan berdasarkan baris sampel. |
| Langkah-langkah | Jumlah langkah dalam histogram. Setiap langkah mencakup rentang nilai kolom diikuti dengan nilai kolom terikat atas. Langkah-langkah histogram ditentukan pada kolom kunci pertama dalam statistik. Jumlah maksimum langkah adalah 200. |
| Kepadatan | Dihitung sebagai nilai 1/ berbeda untuk semua nilai di kolom kunci pertama objek statistik, tidak termasuk nilai batas histogram. Nilai Kepadatan ini tidak digunakan oleh Pengoptimal Kueri dan ditampilkan untuk kompatibilitas mundur dengan versi sebelum SQL Server 2008. |
| Panjang Kunci Rata-rata | Jumlah rata-rata byte per nilai untuk semua kolom kunci dalam objek statistik. |
| Indeks String | Ya menunjukkan objek statistik berisi statistik ringkasan string untuk meningkatkan perkiraan kardinalitas untuk predikat kueri yang menggunakan operator LIKE; misalnya, WHERE ProductName LIKE '%Bike'. Statistik ringkasan string disimpan secara terpisah dari histogram dan dibuat pada kolom kunci pertama objek statistik ketika berjenis char, varchar, nchar, nvarchar, varchar(max), nvarchar(max), text, atau ntext.. |
| Ekspresi Filter | Predikat untuk subset baris tabel yang disertakan dalam objek statistik. NULL = statistik yang tidak difilter. Untuk informasi selengkapnya tentang predikat yang difilter, lihat Membuat Indeks Terfilter. Untuk informasi selengkapnya tentang statistik yang difilter, lihat Statistik. |
| Baris Tidak Difilter | Jumlah total baris dalam tabel sebelum menerapkan ekspresi filter. Jika Ekspresi Filter adalah NULL, Unfiltered Rows sama dengan Rows. |
| Persentase Sampel Yang Bertahan | Persentase sampel persisten yang digunakan untuk pembaruan statistik yang tidak secara eksplisit menentukan persentase pengambilan sampel. Jika nilai adalah nol, maka tidak ada persentase sampel yang bertahan yang ditetapkan untuk statistik ini. Berlaku untuk: SQL Server 2016 (13.x) SP1 CU4 |
Tabel berikut ini menjelaskan kolom yang dikembalikan dalam tataan hasil saat DENSITY_VECTOR ditentukan.
| Nama kolom | Deskripsi |
|---|---|
| Semua Kepadatan | Kepadatan adalah nilai 1/ berbeda. Hasil menampilkan kepadatan untuk setiap awalan kolom dalam objek statistik, satu baris per kepadatan. Nilai yang berbeda adalah daftar berbeda dari nilai kolom per baris dan awalan per kolom. Misalnya, jika objek statistik berisi kolom kunci (A, B, C), hasilnya melaporkan kepadatan daftar nilai yang berbeda di masing-masing awalan kolom ini: (A), (A,B), dan (A, B, C). Menggunakan awalan (A, B, C), masing-masing daftar ini adalah daftar nilai yang berbeda: (3, 5, 6), (4, 4, 6), (4, 5, 6), (4, 5, 7). Menggunakan awalan (A, B) nilai kolom yang sama memiliki daftar nilai yang berbeda ini: (3, 5), (4, 4), dan (4, 5) |
| Panjang Rata-rata | Panjang rata-rata, dalam byte, untuk menyimpan daftar nilai kolom untuk awalan kolom. Misalnya, jika nilai dalam daftar (3, 5, 6) masing-masing memerlukan 4 byte panjangnya adalah 12 byte. |
| Kolom | Nama kolom dalam awalan dengan Semua kepadatan dan Panjang rata-rata ditampilkan. |
Tabel berikut ini menjelaskan kolom yang dikembalikan dalam tataan hasil saat opsi HISTOGRAM ditentukan.
| Nama kolom | Deskripsi |
|---|---|
| RANGE_HI_KEY | Nilai kolom terikat atas untuk langkah histogram. Nilai kolom juga disebut nilai kunci. |
| RANGE_ROWS | Perkiraan jumlah baris yang nilai kolomnya berada dalam langkah histogram, tidak termasuk batas atas. |
| EQ_ROWS | Estimasi jumlah baris yang nilai kolomnya sama dengan batas atas langkah histogram. |
| DISTINCT_RANGE_ROWS | Perkiraan jumlah baris dengan nilai kolom yang berbeda dalam langkah histogram, tidak termasuk batas atas. |
| AVG_RANGE_ROWS | Jumlah rata-rata baris dengan nilai kolom duplikat dalam langkah histogram, tidak termasuk batas atas. Ketika DISTINCT_RANGE_ROWS lebih besar dari 0, AVG_RANGE_ROWS dihitung dengan membaangan RANGE_ROWS dengan DISTINCT_RANGE_ROWS. Saat DISTINCT_RANGE_ROWS adalah 0, AVG_RANGE_ROWS mengembalikan 1 untuk langkah histogram. |
Keterangan
Tanggal pembaruan statistik disimpan dalam objek blob statistik bersama dengan histogram dan vektor kepadatan, bukan dalam metadata. Ketika tidak ada data yang dibaca untuk menghasilkan data statistik, blob statistik tidak dibuat, tanggal tidak tersedia, dan kolom yang diperbarui adalah NULL. Ini adalah kasus untuk statistik yang difilter yang predikatnya tidak mengembalikan baris apa pun, atau untuk tabel kosong baru.
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 yang 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_HI_KEY) dan berapa kali garis tersebut terjadi (EQ_ROWS)
- Area solid kiri RANGE_HI_KEY mewakili rentang nilai kolom dan jumlah rata-rata kali setiap nilai kolom terjadi (AVG_RANGE_ROWS). AVG_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 AVG_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 bisa 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.
Vektor Kepadatan
Pengoptimal kueri menggunakan kepadatan untuk meningkatkan perkiraan kardinalitas untuk kueri yang mengembalikan beberapa kolom dari tabel yang sama atau tampilan terindeks. Vektor kepadatan berisi satu kepadatan untuk setiap awalan kolom dalam objek statistik. Misalnya, jika objek statistik memiliki kolom CustomerIdkunci , ItemId dan Price, kepadatan dihitung pada setiap prefiks kolom berikut.
| Awalan kolom | Kepadatan dihitung pada |
|---|---|
| (CustomerId) | Baris dengan nilai yang cocok untuk CustomerId |
| (CustomerId, ItemId) | Baris dengan nilai yang cocok untuk CustomerId dan ItemId |
| (CustomerId, ItemId, Price) | Baris dengan nilai yang cocok untuk CustomerId, ItemId, dan Harga |
Batasan
DBCC SHOW_STATISTICS tidak menyediakan statistik untuk indeks spasial atau indeks penyimpan kolom yang dioptimalkan memori.
Izin untuk SQL Server dan SQL Database
Untuk melihat objek statistik, pengguna harus memiliki SELECT izin pada tabel.
Persyaratan berikut ada agar izin SELECT cukup untuk menjalankan perintah:
- Pengguna harus memiliki izin pada semua kolom dalam objek statistik
- Pengguna harus memiliki izin pada semua kolom dalam kondisi filter (jika ada)
- Tabel tidak boleh memiliki kebijakan keamanan tingkat baris.
- Jika salah satu kolom dalam objek statistik ditutupi dengan aturan Masking Data Dinamis, selain
SELECTizin, pengguna harus memilikiUNMASKizin.
Dalam versi sebelum SQL Server 2012 (11.x) SP1, pengguna harus memiliki tabel atau pengguna harus menjadi anggota sysadmin peran server tetap, db_owner peran database tetap, atau db_ddladmin peran database tetap.
Catatan
Untuk mengubah perilaku kembali ke perilaku SP1 pra SQL Server 2012 (11.x), gunakan traceflag 9485.
Izin untuk Azure Synapse Analytics dan Analytics Platform System (PDW)
DBCC SHOW_STATISTICS memerlukan SELECT izin pada tabel atau keanggotaan dalam sysadmin peran server tetap, db_owner peran database tetap, atau db_ddladmin peran database tetap.
Batasan dan Pembatasan untuk Azure Synapse Analytics dan Analytics Platform System (PDW)
DBCC SHOW_STATISTICS memperlihatkan statistik yang disimpan dalam Shell database di tingkat simpul Kontrol. Ini tidak menunjukkan statistik yang dibuat secara otomatis oleh SQL Server pada simpul Komputasi.
SHOW_STATISTICS DBCC tidak didukung pada tabel eksternal.
Contoh: SQL Server dan SQL Database
J. Mengembalikan semua informasi statistik
Contoh berikut menampilkan semua informasi statistik untuk AK_Address_rowguid indeks Person.Address tabel dalam database AdventureWorks2012.
DBCC SHOW_STATISTICS ("Person.Address", AK_Address_rowguid);
GO
B. Menentukan opsi HISTOGRAM
Ini membatasi informasi statistik yang ditampilkan untuk Customer_LastName data HISTOGRAM.
DBCC SHOW_STATISTICS ("dbo.DimCustomer",Customer_LastName) WITH HISTOGRAM;
GO
Contoh: Azure Synapse Analytics dan Analytics Platform System (PDW)
C. Menampilkan isi dari satu objek statistik
Contoh berikut membuat objek statistik lalu menampilkan konten Customer_LastName statistik pada DimCustomer tabel dalam AdventureWorks database sampel.
-- Uses AdventureWorks
--First, create a statistics object
CREATE STATISTICS Customer_LastName
ON AdventureWorksPDW2012.dbo.DimCustomer (LastName);
GO
DBCC SHOW_STATISTICS ("dbo.DimCustomer",Customer_LastName);
GO
Hasilnya menunjukkan header, vektor kepadatan, dan bagian dari histogram.

Lihat juga
- Statistik
- sys.dm_db_stats_properties (Transact-SQL)
- sys.dm_db_stats_histogram (T-SQL)
- sys.dm_db_incremental_stats_properties (T-SQL)
