Oracle
 sql >> डेटाबेस >  >> RDS >> Oracle

WHERE क्लॉज में DECODE () स्टेटमेंट को परफॉर्मेंस ट्यूनिंग

मैं कोड को इस प्रकार लिखने का सुझाव दूंगा:

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');

इस प्रश्न के लिए, मैं निम्नलिखित पर अनुक्रमित करने का सुझाव दूंगा:

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

उपरोक्त क्वेरी में परिवर्तन:

  • कभी नहीं FROM . में अल्पविराम का प्रयोग करें खंड। हमेशा उचित, स्पष्ट, मानक . का उपयोग करें , पठनीय JOIN वाक्य - विन्यास। (हालांकि, यह प्रदर्शन को प्रभावित नहीं करता है।)
  • decode() बल्कि पालन करना कठिन है। एक साधारण बूलियन or समतुल्य है।
  • BETWEEN यह मानकर अनावश्यक है कि datet भविष्य में नहीं है।
  • SUM(NVL()) इसकी आवश्यकता नहीं है, क्योंकि NULL मूल्यों की उपेक्षा की जाती है। अगर आप NULL के बारे में चिंतित हैं परिणाम, मैं सुझाव दूंगा 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. अद्यतन पर निम्नलिखित पर ORA - 00907 त्रुटि प्राप्त करना

  2. वीडियो:आरएसी पर Oracle 12c पहचान कॉलम प्रदर्शन

  3. पैच 19 . स्थापित करने के बाद शुरुआत में Oracle फॉर्म 6i 0xC0000005 के साथ क्रैश हो जाता है

  4. एक डेटा मॉडल कैसे डिज़ाइन करें जो वर्तमान कर्मचारियों और पूर्वानुमानित कर्मचारियों से संबंधित हो?

  5. Oracle XMLTable में एक चर के साथ XPath का उपयोग कैसे करें?