Có một vài lý do có thể giải thích tại sao bạn thấy hành vi này. Một số cái phổ biến là
- Truy vấn con hoặc CTE có thể được đánh giá lại nhiều lần.
- Vật liệu hóa kết quả từng phần thành
#temp
bảng có thể buộc một thứ tự tham gia tối ưu hơn cho phần đó của kế hoạch bằng cách loại bỏ một số tùy chọn có thể có khỏi phương trình. - Vật liệu hóa kết quả từng phần thành
#temp
bảng có thể cải thiện phần còn lại của kế hoạch bằng cách điều chỉnh các ước tính về bản số kém.
Phương pháp đáng tin cậy nhất chỉ đơn giản là sử dụng #temp
bảng và tự hiện thực hóa nó.
Không đạt được điều đó liên quan đến điểm 1, hãy xem Cung cấp gợi ý để buộc thực hiện hóa trung gian các CTE hoặc bảng dẫn xuất
. Việc sử dụng TOP(large_number) ... ORDER BY
thường có thể khuyến khích kết quả được lưu trữ thay vì đánh giá lại nhiều lần.
Ngay cả khi điều đó hoạt động, tuy nhiên không có số liệu thống kê về ống.
Đối với điểm 2 và 3, bạn sẽ cần phân tích lý do tại sao bạn không đạt được kế hoạch mong muốn. Có thể viết lại truy vấn để sử dụng các vị từ có thể phân loại hoặc cập nhật số liệu thống kê có thể có được một kế hoạch tốt hơn. Nếu không, bạn có thể thử sử dụng gợi ý truy vấn để có được kế hoạch mong muốn.