Ich führe diese Abfrage in der AdventureWorks2012- Datenbank aus:
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
Wenn ich mir den geschätzten Ausführungsplan ansehe, sehe ich Folgendes:
Die anfängliche Indexsuche (oben rechts) verwendet den Index IX_SalesOrderHeader_CustomerID und durchsucht das Literal 11077. Es hat eine Schätzung von 2.6192 Zeilen.
Wenn ich benutze DBCC SHOW_STATISTICS ('Sales.SalesOrderHeader', 'IX_SalesOrderHeader_CustomerID') WITH HISTOGRAM
, zeigt dies, dass der Wert 11077 zwischen den beiden abgetasteten Schlüsseln 11019 und 11091 liegt.
Die durchschnittliche Anzahl unterschiedlicher Zeilen zwischen 11019 und 11091 beträgt 2,619718 oder ist auf 2,61972 gerundet. Dies ist der Wert der geschätzten Zeilen, die für die Indexsuche angezeigt werden.
Der Teil, den ich nicht verstehe, ist die geschätzte Anzahl der Zeilen für die Clustered-Index-Suche anhand der SalesOrderDetail-Tabelle.
Wenn ich renne DBCC SHOW_STATISTICS ('Sales.SalesOrderDetail', 'PK_SalesOrderDetail_SalesOrderID_SalesOrderDetailID')
:
Die Dichte der SalesOrderID (der ich beitrete) beträgt also 3.178134E-05. Dies bedeutet, dass 1 / 3.178134E-05 (31465) der Anzahl der eindeutigen SalesOrderID-Werte in der SalesOrderDetail-Tabelle entspricht.
Wenn im SalesOrderDetail 31465 eindeutige SalesOrderIDs enthalten sind, beträgt die durchschnittliche Anzahl der Zeilen pro SalesOrderID bei einer geraden Verteilung 121317 (Gesamtanzahl der Zeilen) geteilt durch 31465. Der Durchschnitt liegt bei 3,85561
Wenn also die geschätzte Anzahl der zu durchschleifenden Zeilen 2.61972 beträgt und der Durchschnitt in 3.85561 zurückgegeben werden soll, würde ich annehmen, dass die geschätzte Anzahl der Zeilen 2.61972 * 3.85561 = 10.10062 beträgt.
Die geschätzte Anzahl der Zeilen beträgt jedoch 11,4867.
Ich denke, mein Verständnis der zweiten Schätzung ist falsch und die unterschiedlichen Zahlen scheinen darauf hinzudeuten. Was vermisse ich?