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.

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

Bu makalede DBCC SHOW_STATISTICS komutlarının ne işe yaradığı ve sql server istatistiklerinin hangi komutlarla nerede saklandığını görmüş olduk. 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