Estoy ejecutando esta consulta en la base de datos AdventureWorks2012 :
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
Si miro el plan de ejecución estimado, veo lo siguiente:
La búsqueda de índice inicial (arriba a la derecha) está utilizando el índice IX_SalesOrderHeader_CustomerID y está buscando en el literal 11077. Tiene una estimación de 2.6192 filas.
Si lo uso DBCC SHOW_STATISTICS ('Sales.SalesOrderHeader', 'IX_SalesOrderHeader_CustomerID') WITH HISTOGRAM
, muestra que el valor 11077 está entre las dos claves muestreadas 11019 y 11091.
El número promedio de filas distintas entre 11019 y 11091 es 2.619718, o redondeado a 2.61972, que es el valor de las filas estimadas que se muestran para la búsqueda de índice.
La parte que no entiendo es el número estimado de filas para la búsqueda de índice agrupado en la tabla SalesOrderDetail.
Si corro DBCC SHOW_STATISTICS ('Sales.SalesOrderDetail', 'PK_SalesOrderDetail_SalesOrderID_SalesOrderDetailID')
:
Entonces, la densidad de SalesOrderID (a la que me estoy uniendo) es 3.178134E-05. Eso significa que 1 / 3.178134E-05 (31465) es igual al número de valores únicos de SalesOrderID en la tabla SalesOrderDetail.
Si hay 31465 SalesOrderID únicos en SalesOrderDetail, entonces, con una distribución uniforme, el número promedio de filas por SalesOrderID es 121317 (número total de filas) dividido por 31465. El promedio es 3.85561
Entonces, si el número estimado de filas para recorrer es 2.61972, y el promedio que se devolverá en 3.85561, creo que el número estimado de filas sería 2.61972 * 3.85561 = 10.10062.
Pero el número estimado de filas es 11.4867.
Creo que mi comprensión de la segunda estimación es incorrecta y los diferentes números parecen indicar eso. ¿Qué me estoy perdiendo?