Setidaknya ada 11 cara untuk mengontrol rencana tanpa mengubah kueri. Mereka tercantum di bawah ini secara kasar dalam urutan kegunaan:
- Dasar Rencana SQL - Ganti satu paket dengan paket lain.
- Profil SQL - Tambahkan petunjuk "korektif" ke dalam rencana. Misalnya, profil mungkin mengatakan "penggabungan ini menghasilkan 100 kali lebih banyak baris dari yang diharapkan", yang secara tidak langsung mengubah rencana.
- Garis Besar Tersimpan - Idenya mirip dengan SQL Plan Baseline, tetapi dengan fitur yang lebih sedikit. Opsi ini lebih mudah digunakan tetapi kurang kuat dan tidak didukung lagi.
- DBMS_STATS.SET_X_STATS - Memodifikasi tabel, kolom, dan statistik indeks secara manual dapat mengubah rencana secara signifikan dengan membuat objek terlihat lebih atau kurang mahal secara artifisial.
- Kontrol Sesi - Misalnya
alter session set optimizer_features_enable='11.2.0.3';
. Tidak selalu ada parameter yang membantu. Tetapi salah satu parameter OPTIMIZER_* dapat membantu, atau Anda mungkin dapat mengubah paket dengan petunjuk yang tidak terdokumentasi atau menonaktifkan fitur seperti ini:alter session set "_fix_control"='XYZ:OFF';
- Kontrol Sistem - Mirip dengan di atas tetapi berlaku untuk seluruh sistem.
- DBMS_SPD - Arahan Rencana SQL mirip dengan profil karena memberikan beberapa informasi korektif kepada pengoptimal. Namun ini berfungsi pada tingkat yang lebih rendah, di semua paket, dan baru di 12c.
- DBMS_ADVANCED_REWRITE - Ubah kueri menjadi kueri lain.
- Basis Data Pribadi Virtual - Mengubah kueri menjadi kueri lain, dengan menambahkan predikat. Ini tidak dimaksudkan untuk kinerja, tetapi Anda mungkin dapat menyalahgunakannya untuk mengubah jalur akses indeks.
- Kerangka Terjemahan SQL - Ubah kueri menjadi kueri lain, bahkan sebelum diurai. Ini dapat mengaktifkan SQL yang benar-benar "salah" untuk dijalankan.
- SQL Patch (dbms_sqldiag internal.i_create_patch) - Ubah kueri menjadi kueri lain. Mirip dengan DBMS_ADVANCED_REWRITE tetapi tidak didokumentasikan dan mungkin sedikit lebih kuat.