Trong các truy vấn của bạn, hãy thêm OPTION(OPTIMIZE FOR UNKNOWN)
(như mệnh đề cuối cùng) để ngăn chặn việc đánh hơi tham số. Để biết cú pháp và giải thích, hãy xem tài liệu về Gợi ý truy vấn
.
Những gì SQL Server thực hiện lần đầu tiên nó chạy một Thủ tục được lưu trữ là tối ưu hóa (các) kế hoạch thực thi cho các tham số đã được chuyển cho nó. Điều này được thực hiện trong một quá trình được gọi là Parameter Sniffing
.
Nói chung, các kế hoạch thực thi được SQL Server lưu trong bộ nhớ cache để SQL Server không phải biên dịch lại mỗi lần cho cùng một truy vấn. Lần tiếp theo thủ tục được chạy, SQL Server sẽ sử dụng lại (các) kế hoạch thực thi cho các truy vấn trong đó ... Tuy nhiên, (các) kế hoạch thực thi có thể hoàn toàn không hiệu quả nếu bạn gọi nó (chúng) với các tham số khác nhau .
Tùy chọn tôi đã cung cấp cho bạn sẽ nói với trình biên dịch SQL rằng kế hoạch thực thi không nên được tối ưu hóa cho cụ thể tham số, nhưng thay vì cho bất kỳ tham số được chuyển cho Thủ tục đã lưu trữ.
Để trích dẫn tài liệu:
Trong một số trường hợp, Thủ tục được lưu trữ có thể được hưởng lợi từ tính năng Đánh hơi tham số, trong một số trường hợp thì không. Đối với các Thủ tục được lưu trữ không được hưởng lợi từ Paramater Sniffing, bạn có thể thêm tùy chọn vào từng truy vấn sử dụng bất kỳ tham số nào của Thủ tục được Lưu trữ.