Câu trả lời:
Tối ưu hóa cho UNKNOWN không sử dụng giá trị - thay vào đó, nó sử dụng vectơ mật độ.
Nếu bạn chạy DBCC SHOWSTATISTICS, đó là giá trị được liệt kê trong cột "Tất cả mật độ" của tập kết quả thứ hai:
Trong ví dụ này, tôi đang sử dụng cơ sở dữ liệu demo StackOverflow. Vectơ mật độ cho cột Danh tiếng là 5,962674E-05.
Nếu bạn lấy giá trị đó, nhân với số lượng hàng trong bảng, 5.962674E-05 * 5277831, bạn sẽ nhận được 314.69985680094. Đó là số lượng hàng SQL Server sẽ quay trở lại cho bất kỳ bộ lọc Danh tiếng cụ thể nào.
Benjamin Nevarez có một bài viết hay về blogOPTIMIZE FOR UNKNOWN
của mình
Về cơ bản, SQL Server đang sử dụng số liệu thống kê về bảng cùng với toán học để xác định giá trị nào sẽ sử dụng.
Từ bài viết của anh ấy:
Mật độ được định nghĩa là 1 / số giá trị riêng biệt. Bảng SalesOrderDetail có 266 giá trị riêng biệt cho ProductID, do đó mật độ được tính là 1/266 hoặc 0,003759399 như được hiển thị trước đó trên đối tượng thống kê. Một giả định trong mô hình toán học thống kê được sử dụng bởi SQL Server là giả định tính đồng nhất. Vì trong trường hợp này, SQL Server không thể sử dụng biểu đồ, giả định tính đồng nhất cho biết rằng với bất kỳ giá trị đã cho nào, phân phối dữ liệu là như nhau. Để có được số lượng bản ghi ước tính, SQL Server sẽ nhân mật độ với tổng số bản ghi hiện tại, 0,003759399 * 121,317 hoặc 456.079, như thể hiện trong kế hoạch. Điều này cũng giống như để chia tổng số bản ghi cho số lượng giá trị riêng biệt, 121.317 / 266, cũng cho 456.079.