Tôi có một truy vấn sử dụng một hàm trên vị ngữ, đại loại như thế này:
commentType = 'EL'
AND commentDateTime >= DATEADD(month,datediff(month,0,getdate()) - 13,0)
Tôi có một chỉ mục được lọc trên commentType có 40K hàng và khi tôi chạy truy vấn, số lượng hàng ước tính cho Index Seek là rất chính xác (khoảng 11K), nhưng đối với bước tiếp theo (toán tử sắp xếp), nó hoàn toàn bỏ qua các thống kê và chỉ ước tính tổng số hàng trong chỉ mục được lọc.
Tại sao chuyện này đang xảy ra? Tôi biết những điều cơ bản về tính khả dụng , và tôi đã thử nghiệm chỉ vì mục đích tỉnh táo thay thế dữ liệu bằng một ngày thực tế (2014-01-01) và voila ... Việc sắp xếp bắt đầu đoán chính xác số lượng hàng ...
Tại sao điều này xảy ra và làm thế nào tôi có thể sửa chữa nó? Tôi không thể vượt qua một ngày cố định ...
DATEADD(month, -13, DATEADD(day, 1-DATEPART(day, SYSDATETIME()))
và xem nếu có sự khác biệt?
(commentType, commentDate)
, nó có hoạt động tốt hơn ở đó không? Chỉ là các chỉ mục được lọc đôi khi có thể báo cáo sai các ước tính tại các điểm khác nhau trong các kế hoạch. Ước tính dường như thoát ra bằng cách báo cáo tổng số trong chỉ mục được lọc, nhưng thực tế là kế hoạch đang được hiển thị sai.
DATEADD(month,datediff(month,0,getdate()) - 13,0)
không có ý nghĩa với tôi. Bạn đang cố gắng làm gì với điều này? Nó có thể được cải thiện / đơn giản hóa?