Được rồi, giả sử rằng bạn đang nói về một biến cục bộ chạy từ truy vấn trong SSMS vì nó không được chỉ định khác. Ngay cả khi bạn sử dụng cùng một giá trị cho giá trị
AND UserStatus = @userStatus
mà bạn sẽ sử dụng theo nghĩa đen, AND UserStatus = 1
bạn sẽ thấy sự khác biệt trong kế hoạch thực hiện của mình do cách ước tính số lượng thẻ được tạo ra.
Khi bạn sử dụng một giá trị bằng chữ, SQL Server sẽ đi ra biểu đồ cho bảng đó và xem giá trị đó phù hợp ở đâu trong khóa phạm vi. Ước tính thu thập được trên đó sẽ dẫn đến một trong hai kịch bản.
HISTOGRAM TRỰC TIẾP HIT Về cơ bản, điều này có nghĩa là có một RANGE_HI_KEY
giá trị (Giá trị cột trên cho bất kỳ bước nào trong biểu đồ) cho giá trị bằng chữ cụ thể đó trong truy vấn của bạn và do đó ước tính sẽ khớp với số EQ_ROWS
(# hàng có giá trị bằng RANGE_HI_KEY
) trong biểu đồ . Điều này có nghĩa là ước tính của bạn sẽ là số lượng hàng khớp với giá trị đó dựa trên lần cuối bạn cập nhật số liệu thống kê.
LỊCH SỬ INTRA-BƯỚC HIT Đây là khi giá trị tồn tại trong một phạm vi giữa hai RANGE_HI_KEY
giá trị. Khi giá trị bằng chữ của bạn nằm trong phạm vi đó, nó được tính bằng RANGE_ROWS
(số lượng hàng giữa hai bước biểu đồ), DINSTINCT_RANGE
(số lượng giá trị khác biệt trong bước biểu đồ đó) và AVG_RANGE_ROWS
( RANGE_ROWS
/ DISTINCT_RANGE_ROWS
) và điều đó sẽ cho bạn ước tính của bạn.
Tuy nhiên, khi bạn chạy với một biến cục bộ, bạn sẽ không còn đi đến Biểu đồ cho các giá trị này vì @Variable
không biết trong thời gian chạy.
Để biết thêm thông tin về chủ đề này, tôi khuyên bạn nên đọc bài báo trắng này của Joe Sack.
DENSITY YAMOR Khi không có giá trị cụ thể nào đi kèm với máy chủ SQL thay vào đó sử dụng Mật độ để có thể xác định số lượng hàng ước tính được trả về cho vị từ đó. Mật độ là 1 / số lượng giá trị riêng biệt trong cột đó. Vì vậy, ước tính cardinality của bạn sẽ là Mật độ * số lượng hàng trong bảng.
Vì vậy, câu chuyện dài không. Ngay cả khi bạn chạy cùng một giá trị lặp đi lặp lại với một biến cục bộ, bạn sẽ không nhận được kết quả tương tự vì những lý do được giải thích thêm trong liên kết Eric Cung cấp từ Kendra Little .