Bu sorguyu AdventureWorks2012 veritabanında çalıştırıyorum:
SELECT
s.SalesOrderID,
d.CarrierTrackingNumber,
d.ProductID,
d.OrderQty
FROM Sales.SalesOrderHeader s
JOIN Sales.SalesOrderDetail d
ON s.SalesOrderID = d.SalesOrderID
WHERE s.CustomerID = 11077
Tahmini yürütme planına bakarsam aşağıdakileri görürüm:
İlk dizin araması (sağ üstte) IX_SalesOrderHeader_CustomerID dizinini kullanıyor ve 11077 değişmez değerini arıyor. Tahmini 2.6192 satır.
Kullanmak ise DBCC SHOW_STATISTICS ('Sales.SalesOrderHeader', 'IX_SalesOrderHeader_CustomerID') WITH HISTOGRAM
, değerin 11077, iki örnek şifreler 11019 ve 11091 arasında olduğunu göstermektedir.
11019 ve 11091 arasındaki farklı satırların ortalama sayısı 2.619718'dir veya indeks arayışı için gösterilen tahmini satırların değeri olan 2.61972'ye yuvarlanır.
Anlamadığım bölüm, SalesOrderDetail tablosuna karşı kümelenmiş dizin araması için tahmini satır sayısıdır.
Eğer koşarsam DBCC SHOW_STATISTICS ('Sales.SalesOrderDetail', 'PK_SalesOrderDetail_SalesOrderID_SalesOrderDetailID')
:
Yani (katıldığım) SalesOrderID yoğunluğu 3.178134E-05. Bu, 1 / 3.178134E-05 (31465) öğesinin SalesOrderDetail tablosundaki benzersiz SalesOrderID değerlerinin sayısına eşit olduğu anlamına gelir.
SalesOrderDetail'ta 31465 benzersiz SalesOrderID varsa, eşit bir dağıtımla, SalesOrderID başına ortalama satır sayısı 121317'dir (toplam satır sayısı) 31465'e bölünür. Ortalama 3.85561
Dolayısıyla, döngüden geçirilecek tahmini satır sayısı 2.61972 ise ve 3.85561'de döndürülecek ortalama ise, tahmini satır sayısının 2.61972 * 3.85561 = 10.10062 olacağını düşünürüm.
Ancak tahmini satır sayısı 11.4867'dir.
İkinci tahmine ilişkin anlayışımın yanlış olduğunu düşünüyorum ve farklı sayılar bunu gösteriyor gibi görünüyor. Neyi kaçırıyorum?