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 dibacaJOIN
sintaksis. (Namun, ini tidak memengaruhi kinerja.) decode()
agak sulit untuk diikuti.or
boolean sederhana setara.BETWEEN
tidak perlu dengan asumsi bahwadatet
tidak di masa depan.SUM(NVL())
tidak diperlukan, karenaNULL
nilai-nilai diabaikan. Jika Anda khawatir tentangNULL
hasilnya, saya akan menyarankanCOALESCE(SUM(dd.amt), 0)