Tìm giá trị TỐI ƯU CHO UNKNOWN đang sử dụng


Câu trả lời:


17

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:

DBCC SHOW_STATISTICS cho dbo.Users.IX_Reputing

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.


5

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.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.