Có ít nhất 11 cách để kiểm soát một kế hoạch mà không cần sửa đổi truy vấn. Chúng được liệt kê dưới đây gần đúng theo thứ tự hữu ích:
- Đường cơ sở kế hoạch SQL - Thay thế một kế hoạch này bằng một kế hoạch khác.
- Cấu hình SQL - Thêm các gợi ý "sửa chữa" vào các kế hoạch. Ví dụ:một hồ sơ có thể nói "kết hợp này trả về số hàng nhiều hơn 100 lần so với dự kiến", điều này gián tiếp thay đổi kế hoạch.
- Đường viền được Lưu trữ - Ý tưởng tương tự như SQL Plan Baseline, nhưng ít tính năng hơn. Tùy chọn này đơn giản hơn để sử dụng nhưng kém mạnh mẽ hơn và không được hỗ trợ nữa.
- DBMS_STATS.SET_X_STATS - Việc sửa đổi thống kê bảng, cột và chỉ mục theo cách thủ công có thể thay đổi đáng kể kế hoạch bằng cách làm cho các đối tượng trông giả tạo hơn hoặc ít tốn kém hơn.
- Kiểm soát phiên - Ví dụ:
alter session set optimizer_features_enable='11.2.0.3';
. Không phải lúc nào cũng có các thông số hữu ích. Nhưng một trong các tham số OPTIMIZER_ * có thể hữu ích hoặc bạn có thể thay đổi kế hoạch với một gợi ý không có tài liệu hoặc tắt một tính năng như sau:alter session set "_fix_control"='XYZ:OFF';
- Kiểm soát Hệ thống - Tương tự như trên nhưng áp dụng cho toàn hệ thống.
- DBMS_SPD - Chỉ thị kế hoạch SQL tương tự như một cấu hình trong đó nó cung cấp một số thông tin sửa chữa cho trình tối ưu hóa. Tuy nhiên, tính năng này hoạt động ở cấp độ thấp hơn, trên tất cả các gói và mới ở mức 12c.
- DBMS_ADVANCED_REWRITE - Thay đổi một truy vấn thành một truy vấn khác.
- Cơ sở dữ liệu riêng ảo - Thay đổi một truy vấn thành một truy vấn khác, bằng cách thêm các vị từ. Nó không dành cho hiệu suất nhưng bạn có thể lạm dụng nó để thay đổi đường dẫn truy cập chỉ mục.
- Khung dịch SQL - Thay đổi một truy vấn thành một truy vấn khác, trước khi nó được phân tích cú pháp. Điều này có thể cho phép chạy SQL hoàn toàn "sai".
- Bản vá lỗi SQL (dbms_sqldiag internal.i_create_patch) - Thay đổi một truy vấn thành một truy vấn khác. Tương tự như DBMS_ADVANCED_REWRITE nhưng nó không có tài liệu và có lẽ mạnh hơn một chút.