Vấn đề bạn đang gặp phải (gần như chắc chắn) là do kế hoạch truy vấn được lưu trong bộ nhớ cache, phù hợp với một số phiên bản của tham số được truyền cho truy vấn, nhưng không phù hợp với những phiên bản khác (còn gọi là Parameter Sniffing).
Đây là một trường hợp phổ biến và thường trở nên tồi tệ hơn do thống kê lỗi thời và / hoặc chỉ mục bị phân mảnh kém.
Bước đầu tiên :đảm bảo rằng bạn đã xây dựng lại tất cả các chỉ mục của mình và thống kê trên các cột không được lập chỉ mục được cập nhật. (Ngoài ra, hãy đảm bảo rằng khách hàng của bạn có công việc duy trì chỉ mục được lên lịch thường xuyên)
exec sp_msforeachtable "DBCC DBREINDEX('?')"
go
exec sp_msforeachtable "UPDATE STATISTICS ? WITH FULLSCAN, COLUMNS"
go
Đây là tài liệu tham khảo chuẩn:Chậm trong ứng dụng, Nhanh trong SSMS?
Nếu sự cố vẫn tồn tại sau khi xây dựng lại chỉ mục và cập nhật thống kê, thì bạn có một số tùy chọn:
-
Sử dụng SQL động (nhưng hãy đọc phần này trước:Lời nguyền và phước lành của SQL động)
-
Sử dụng
OPTIMIZE FOR
-
Sử dụng
WITH(RECOMPILE)