Chúng tôi biết rằng cấu trúc ghi nhớ được cắt tỉa và một số kế hoạch thay thế đắt tiền bị loại bỏ trong quá trình tối ưu hóa. Tôi đã tự hỏi nếu có cách nào để ngăn chặn điều này và để cho trình tối ưu hóa chỉ xem xét mọi kế hoạch có thể và chọn phương án tốt nhất từ tất cả các phương án?
Có, nhưng tôi không công khai nó bởi vì nó sẽ bị hiểu lầm và áp dụng sai. Trong mọi trường hợp, nó sẽ không dẫn đến một tìm kiếm toàn diện về không gian kế hoạch vì chỉ có một bộ biến đổi giới hạn (những biến đổi thường tạo ra kết quả tốt) được thực hiện.
Ngăn chặn cắt tỉa và loại bỏ nói chung đơn giản sẽ dẫn đến (nhiều) thời gian biên dịch dài hơn mà không có nhiều cải thiện về chất lượng kế hoạch cuối cùng, nếu có.
Cuối cùng, câu hỏi là một câu hỏi tự nhiên và hợp lý, nhưng nó được xác định dựa trên sự hiểu lầm về các mục tiêu của trình tối ưu hóa truy vấn SQL Server: nó được thiết kế để tìm ra các kế hoạch tốt cho các truy vấn phổ biến một cách nhanh chóng. Nó không được xây dựng trên một khung được thiết kế để tìm kiếm toàn diện.
Nếu bạn có một tình huống trong thế giới thực sẽ được hưởng lợi từ một cách tiếp cận khác để tối ưu hóa, bạn có thể đưa ra trường hợp đó tại trang web Connect (mặc dù tôi nghĩ rằng Microsoft không thể đầu tư các tài nguyên kỹ thuật cần thiết).