Tôi đang chạy truy vấn này trong AdventureWorks2012 cơ sở dữ liệu :
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
Nếu tôi nhìn vào kế hoạch thực hiện ước tính, tôi thấy như sau:
Tìm kiếm chỉ mục ban đầu (trên cùng bên phải) đang sử dụng chỉ mục IX_SalesOrderHeader_CustomerID và tìm kiếm trên chữ 11077. Nó có ước tính 2.6192 hàng.
Nếu tôi sử dụng DBCC SHOW_STATISTICS ('Sales.SalesOrderHeader', 'IX_SalesOrderHeader_CustomerID') WITH HISTOGRAM
, nó cho thấy giá trị 11077 nằm giữa hai khóa được lấy mẫu 11019 và 11091.
Số lượng hàng trung bình khác nhau giữa 11019 và 11091 là 2.619718 hoặc được làm tròn thành 2.61972 là giá trị của các hàng ước tính được hiển thị cho tìm kiếm chỉ mục.
Phần tôi không hiểu là số lượng hàng ước tính cho chỉ mục được tìm kiếm trong bảng SalesOrderDetail.
Nếu tôi chạy DBCC SHOW_STATISTICS ('Sales.SalesOrderDetail', 'PK_SalesOrderDetail_SalesOrderID_SalesOrderDetailID')
:
Vì vậy, mật độ của SalesOrderID (mà tôi đang tham gia) là 3.178134E-05. Điều đó có nghĩa là 1 / 3.178134E-05 (31465) bằng với số lượng giá trị SalesOrderID duy nhất trong bảng SalesOrderDetail.
Nếu có 31465 SalesOrderID duy nhất trong SalesOrderDetail, thì với phân phối chẵn, số lượng hàng trung bình trên mỗi SalesOrderID là 121317 (tổng số hàng) chia cho 31465. Trung bình là 3,85561
Vì vậy, nếu số lượng hàng ước tính được lặp qua là 2.61972 và trung bình được trả về trong 3.85561, tôi sẽ nghĩ rằng số lượng hàng ước tính sẽ là 2.61972 * 3.85561 = 10.10062.
Nhưng số lượng hàng ước tính là 11.4867.
Tôi nghĩ rằng sự hiểu biết của tôi về ước tính thứ hai là không chính xác và các con số khác nhau dường như chỉ ra điều đó. Tôi đang thiếu gì?