SQL Server’daki istatistikler ikili büyük nesnelerde (BLOB’lar) saklanır ve aşağıdaki sistem katalog görünümleri ve DMV’ler kullanılarak erişilebilir.
- sys.stats
İstatistiklerin isim, otomatik oluşturulup oluşturulmadığı gibi genel bilgilerini vermektedir.
SELECT * FROM sys.stats
WHERE object_id = OBJECT_ID('[Person].[Address]')

- sys.stats_columns
- sys.dm_db_stats_properties
- sys.dm_db_stats_histogram
Yukarıdaki komutlarla belirli stast_id değerini belirterek ilgili istatistik için detaylı bilgiye bakılabilir.
select*from sys.dm_db_stats_properties(object_id('person.person'),2)
select*from sys.dm_db_stats_histogram(object_id('person.person'),3)
Ancak, nesne istatistiklerini görüntülemek için çok daha kolay bir yöntem DBCC SHOW_STATISTICS komutunu kullanmaktır. Aşağıda, Sales.SalesOrderDetail tablosundaki bir dizin ve ikinci olarak bir sütun için oluşturulan istatistiklere bakmak için iki örnek bulunmaktadır.
DBCC SHOW_STATISTICS(Tablo_Adı, İstatistik_Adı)
DBCC SHOW_STATISTICS(Tablo_Adı, İndexs_Adı)
DBCC SHOW_STATISTICS ("Sales.SalesOrderHeader",IX_SalesOrderHeader_CustomerID)

DBCC SHOW_STATISTICS, bir tabloda veya dizinli görünümde verilen bir istatistiğin gerçek durumunu gösterir. Bu komutun çıktısı üç öğeden oluşur; Statistics Header, Density Vector(yoğunluk vektörü) ve Histogram. Bu kavramları derinlemesine inceleyeceğiz, ancak önce size en temel sözdizimini ve çıktısını göstereceğim.
DBCC SHOW_STATISTICS('Production.Product', [AK_Product_Name])

Yukarıdaki 1 bölüm StatisticsHeader, 2 bölüm Density Vector,3 bölüm Histogram olarak karşılaşılmaktadır.
Aşağıdaki bölüm Statistics Header bölümündeki açıklamaları görmekteyiz.
Statistics Header
Sütun adı | Tanım |
Name | İstatistik adı. |
Updated | İstatistikler son kez güncellendiği tarih. |
Rows | Bu, istatistiklerin en son güncellendiği anda tablo ve index viewdeki toplam satır sayısını temsil eder. İstatistiklerinizin güncelliğini yitirip yitirmediğini görmenin kolay bir yolu, bu sayıyı tablodaki gerçek satır sayısıyla karşılaştırmaktır. |
Rows Sampled | İstatistikleri oluşturmak için örnek alınan satır sayısıdır. Fullscan işleminde bu değerler birbirine eşit olmaktadır. |
Step | Bu histogramdaki adım sayısıdır. Histogram bölümünde bahsi geçecek konu. |
Density | Bu öğe sorgu iyileştiricisi tarafından kullanılmaz ve yalnızca geriye dönük uyumluluk içindir. |
Average Key Length | İstatistikleri oluşturan sütun veya sütun kümesinin bayt cinsinden ortalama boyutu. |
String Index | İstatistikler, “Where Column LIKE ‘%Value’” biçimindeki tahminler için optimizasyonu iyileştirmek amacıyla özetlenmiş istatistikler içeriyorsa, bu değer EVET olarak ayarlanır. Kısacası string bir ifade varsa yes değeridir. |
Filter Expression | İstatistikler filtrelenirse filtre yordamını gösterir, aksi takdirde NULL olarak ayarlanır. |
Unfiltered Rows | İstatistikler filtrelenirse, filtre uygulanmadan önce tablodaki satır sayısını gösterir. Aksi takdirde bu değer toplam rows sayısına eşittir. |
Density Vector

2.912151E-10 ve 2.805216E-10 gibi çok küçük değerler, bu sütun(lar)ın yüksek seçiciliğe (high selectivity) sahip olduğunu gösterir. SIRNMR sütununda neredeyse her değer benzersiz demektir (eşsiz/unique’e yakın).
Sütun adı | Tanım |
All Density(Tüm yoğunluk) | Bu 0 ile 1 arasında bir sayıdır. 1/n olarak tanımlanır, burada n farklı değerlerin sayısıdır. Yoğunluk sıfıra ne kadar yakınsa anahtar değeri o kadar benzersizdir, bu yüzden aday anahtarların yoğunluğu daha düşüktür. |
Average Length | İstatistikleri oluşturan sütun veya sütun kümesinin bayt cinsinden ortalama boyutu. 8 veya 16 gibi değerler, bu sütun(lar)daki verilerin ortalama byte cinsinden boyutudur. 8 değerini integer bir olarak kabul edebiliriz. |
Columns | All Density ve Average Length değerlerinin görüntülendiği örnekteki sütunların adları. |
Density Vector Neden Önemli?
SQL Server, bu istatistikleri sorgu performansı için kullanır. Örneğin:
All Density değeri düşükse, sorgu optimizörü bu sütunun filtreleme için iyi bir aday olduğunu düşünür.
Average Length, bellek tahsisi ve I/O maliyetini hesaplamada kullanılır.
Histogram
Histogram, bir veri grubundaki değerlerin sınıflandırılmasıdır. Histogramlar, bir veri kümesinin frekans dağılımını görmemizi sağlar.
Sütun adı | Tanım |
RANGE_HI_KEY | Bir histogram adımındaki son değer |
RANGE ROWS | İlk HI_KEY değeri ile bir sonraki HI_KEY arasında kalan tahmini satır sayısı. Where koşulunda iki aralık belirtilirse dönen sonuç ikinci adımın yanında bulunan range |
EQ_ROWS | Histogram adımındaki satırların tahmini sayısı. |
DISTINCT_RANGE_ROWS | Histogram adımındaki tekil olan değerlerin sayısı |
AVG_RANGE_ROWS | Bir histogram adımında yinelenen sütun değerlerine sahip satırların ortalama sayısı. DISTINCT_RANGE_ROWS sıfırdan büyük olduğunda RANGE_ROWS’u DISTINCT_RANGE_ROWS’a bölerek hesaplanır, aksi takdirde değeri 1’dir. |
Bir istatistik nesnesinin histogramı aşağıdaki sorgu ile alınabilir:
DBCC SHOW_STATISTICS (table_name, statistics_name) WITH HISTOGRAM

İstatistikler oluşturulurken sql serverde yaptığımız select sorgusu gibi davranmaz. Satırları okuyarak onları yukarıdaki resimdeki gibi parçalara ayırır. Yukarıdaki 261285, 514828 , 667272 gibi. Ve bunlar arasındaki satır sayılarını tahmin eder(estimated row number)
Dikkat ederseniz 261285, 514828 arasında 310810 satır olduğunu ifade etmektedir. 310810 satır sayısının 253542 satırının tekil olduğunu DISTINCT_RANGE_ROWS bölümünden anlıyoruz.
İlgili değerler birbirine bölünerek avg_range_rows değerimiz ortaya çıkmaktadır.( 1.225874)
AVG_RANGE_ROWS: DISTINCT_RANGE_ROWS sıfırdan büyük olduğunda RANGE_ROWS’u DISTINCT_RANGE_ROWS’a bölerek hesaplanır, aksi takdirde değeri 1’dir.
DBCC SHOW_STATISTICS değerlerini ilgili istatistik üzerine çift tıkladığımızda Details kısmından görebiliriz.

Bu makalede DBCC SHOW_STATISTICS komutlarının ne işe yaradığı ve sql server istatistiklerinin hangi komutlarla nerede saklandığını görmüş olduk.
Sadece density vectörü görmek için aşağıdaki komut kullanılmaktadır.
dbcc show_statistics(SSSVP,PK__SSSVP__3799936E6E7977FF) with density_vector

Başka bir makalede görüşmek dileğiyle..
“İnkar edenleri ise, dünyada ve ahirette şiddetli bir azapla azaplandıracağım. Onların hiç yardımcıları yoktur.” Al-i İmran Suresi, 56. Ayet