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

Apakah substr atau LIKE lebih cepat di Oracle?

Dengan asumsi kinerja maksimum adalah tujuannya, saya idealnya memilih SUBSTR(my_field,1,6) dan buat indeks berbasis fungsi untuk mendukung kueri.

CREATE INDEX my_substr_idx
    ON my_table( substr( my_field,1,6 ) );

Seperti yang ditunjukkan orang lain, SUBSTR(my_field,1,6) tidak akan dapat menggunakan indeks biasa pada MY_FIELD . Versi LIKE mungkin menggunakan indeks, tetapi perkiraan kardinalitas pengoptimal dalam kasus itu umumnya agak buruk sehingga sangat mungkin untuk tidak menggunakan indeks ketika akan membantu atau menggunakan indeks ketika pemindaian tabel akan lebih disukai. Mengindeks ekspresi aktual akan memberi pengoptimal lebih banyak informasi untuk dikerjakan sehingga kemungkinan besar akan memilih indeks dengan benar. Seseorang yang lebih pintar dari saya mungkin dapat menyarankan cara untuk menggunakan statistik pada kolom virtual dalam 11g untuk memberikan pengoptimal informasi yang lebih baik untuk kueri LIKE.

Jika 6 adalah variabel (yaitu Anda terkadang ingin mencari 6 karakter pertama dan terkadang ingin mencari nomor yang berbeda), Anda mungkin tidak akan dapat membuat indeks berbasis fungsi untuk mendukung kueri tersebut. Dalam hal ini, Anda mungkin lebih baik dengan keanehan keputusan pengoptimal dengan formulasi LIKE.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. ORA-6502 dengan Pemicu Logging Hibah

  2. Alat yang Tepat Membuat Tuning Bekerja Cepat

  3. Oracle Home Hanya Baca

  4. Permintaan EF ke Oracle melempar ORA-12704:ketidakcocokan set karakter

  5. SQL 'DAN' atau 'ATAU' didahulukan?