Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

Apakah ada cara untuk memaksa Oracle mengubah rencana kueri tanpa menggunakan petunjuk?

Setidaknya ada 11 cara untuk mengontrol rencana tanpa mengubah kueri. Mereka tercantum di bawah ini secara kasar dalam urutan kegunaan:

  1. Dasar Rencana SQL - Ganti satu paket dengan paket lain.
  2. 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.
  3. 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.
  4. 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.
  5. 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';
  6. Kontrol Sistem - Mirip dengan di atas tetapi berlaku untuk seluruh sistem.
  7. 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.
  8. DBMS_ADVANCED_REWRITE - Ubah kueri menjadi kueri lain.
  9. 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.
  10. Kerangka Terjemahan SQL - Ubah kueri menjadi kueri lain, bahkan sebelum diurai. Ini dapat mengaktifkan SQL yang benar-benar "salah" untuk dijalankan.
  11. 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.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jalankan Fungsi oracle yang mengembalikan kursor referensi di C #

  2. Bisakah saya menggunakan fungsi analitik Oracle di sini?

  3. Tentukan skema default untuk kumpulan JDBC di weblogic/Oracle

  4. Konversikan keep density_rank dari kueri Oracle menjadi postgres

  5. Penggantian Variabel/Literal untuk Kursor PL/SQL?