Cho rằng trình tối ưu hóa không thể mất toàn bộ thời gian cần thiết (nó phải giảm thiểu thời gian thực hiện và không đóng góp cho nó) để khám phá tất cả các kế hoạch thực hiện có thể mà đôi khi nó bị cắt.
Tôi đã tự hỏi nếu điều này có thể được ghi đè để bạn có thể cung cấp trình tối ưu hóa mọi lúc trong nhu cầu (hoặc một lượng mili giây nhất định).
Tôi không có nhu cầu này (atm) nhưng tôi có thể tưởng tượng ra một kịch bản trong đó một truy vấn phức tạp được thực hiện trong một vòng lặp chặt chẽ và bạn muốn đưa ra kế hoạch tối ưu và lưu trữ nó trước khi xử lý.
Tất nhiên, bạn có một vòng lặp chặt chẽ, bạn nên viết lại truy vấn để nó biến mất nhưng hãy chịu đựng tôi.
Đây không chỉ là một câu hỏi vì tò mò và cũng để xem liệu đôi khi có sự khác biệt giữa tối ưu hóa ngắn mạch và đầy đủ hay không.
Hóa ra bạn có thể cung cấp cho trình tối ưu hóa nhiều thời gian hơn với cờ theo dõi 2301. Nó không chính xác như những gì tôi đã hỏi nhưng nó lại gần.
Thông tin tốt nhất tôi tìm thấy về điều này là trong Phần mở rộng mô hình bộ xử lý truy vấn trong SQL Server 2005 SP1 của Ian Jose.
Sử dụng cờ dấu vết này một cách cẩn thận! Nhưng nó có thể hữu ích khi đưa ra các kế hoạch tốt hơn. Xem thêm:
- Các bài viết được gắn thẻ "mức tối ưu hóa" của Grant Fritchey.
- Trước khi bạn nâng cấp lên SQL Server 2008, bởi Brent Ozar.
- Điều chỉnh các tùy chọn cho SQL Server khi chạy trong khối lượng công việc hiệu suất cao bằng Hỗ trợ của Microsoft.
Tôi đã suy nghĩ về các truy vấn có rất nhiều phép nối trong đó không gian giải pháp cho thứ tự nối phát nổ theo cấp số nhân. Các heuristic mà SQL Server sử dụng là khá tốt nhưng tôi đã tự hỏi liệu trình tối ưu hóa sẽ đề xuất một thứ tự khác nếu nó có nhiều thời gian hơn (trong khoảng vài giây hoặc thậm chí là vài phút).