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

Apakah Oracle menggunakan evaluasi hubung singkat?

Itu tergantung.. Secara umum, Oracle tidak menjamin bahwa pernyataan SQL akan menggunakan evaluasi hubung singkat (meskipun PL/SQL dijamin untuk melakukan evaluasi hubung singkat). Pengoptimal Oracle bebas mengevaluasi predikat dalam urutan apa pun yang diharapkan paling efisien. Itu mungkin berarti bahwa predikat pertama dievaluasi terlebih dahulu dan hanya baris yang cocok yang memiliki predikat kedua yang dievaluasi tetapi sangat mungkin bahwa kebalikannya terjadi atau Oracle mengubah kueri menjadi semacam UNION dan sepenuhnya mengevaluasi kedua predikat sebelum menggabungkan hasilnya.

Karena itu, jika pengoptimal dapat menentukan pada waktu kompilasi bahwa predikat akan selalu dievaluasi ke TRUE atau FALSE , pengoptimal seharusnya memperlakukannya sebagai konstanta. Jadi jika, misalnya, ada batasan pada tabel yang mencegah X dari yang pernah memiliki nilai 'true', pengoptimal tidak boleh mengevaluasi predikat kedua sama sekali (meskipun versi pengoptimal yang berbeda akan memiliki kemampuan yang berbeda untuk mendeteksi bahwa ada sesuatu yang konstan pada waktu kompilasi).

Adapun bagian kedua dari pertanyaan Anda, tanpa melihat rencana kueri, sangat sulit untuk mengatakannya. Pengoptimal Oracle cenderung cukup baik dalam mengubah kueri dari satu bentuk ke bentuk lain jika ada cara yang lebih efisien untuk mengevaluasinya. Namun secara umum, jika subQ akan mengembalikan jumlah baris yang relatif besar dibandingkan dengan table , mungkin lebih efisien untuk menyusun kueri sebagai EXISTS bukan sebagai IN .



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Oracle:Pilih Dari Tipe Data Rekam

  2. Basis Data Produksi Baru

  3. Oracle SQL - Jumlahkan dan kelompokkan data berdasarkan minggu

  4. ORA-00904:pengenal tidak valid

  5. Bagaimana menemukan karyawan dengan gaji tertinggi kedua?