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

Penyetelan kinerja pernyataan DECODE() dalam klausa WHERE

Saya sarankan menulis kode sebagai:

SELECT SUM(dd.amt)
FROM db JOIN
     dd
     ON db.id = dd.dsba_id
WHERE dd.nd_id = xxxxxxx AND
      dd.a_id = 'xxxxx-xx' AND
      (db.v_id = xxxxxxxxx OR db.code = 'COMPLETE') AND
      db.datet >= trunc(sysdate, 'YEAR');

Untuk kueri ini, saya akan merekomendasikan indeks pada:

  • db(nd_id, a_id, id, datet, code)
  • dd(dsba_id, datet, v_id)

Perubahan pada kueri di atas:

  • Tidak pernah gunakan koma di FROM ayat. Selalu gunakan yang tepat, eksplisit, standar , dapat dibaca JOIN sintaksis. (Namun, ini tidak memengaruhi kinerja.)
  • decode() agak sulit untuk diikuti. or boolean sederhana setara.
  • BETWEEN tidak perlu dengan asumsi bahwa datet tidak di masa depan.
  • SUM(NVL()) tidak diperlukan, karena NULL nilai-nilai diabaikan. Jika Anda khawatir tentang NULL hasilnya, saya akan menyarankan COALESCE(SUM(dd.amt), 0)



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tomcat 9 dengan Apache DBCP + Spring 5 + Oracle 12c + SqlArrayValue

  2. Apakah penggunaan SELECT COUNT(*) sebelum SELECT INTO lebih lambat daripada menggunakan Pengecualian?

  3. Masalah Performa saat Memperbarui Tabel dari Tabel Lain

  4. menampilkan hasil secara vertikal di oracle

  5. Mencari Teks dalam Prosedur Tersimpan Oracle