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

समूहीकरण में न्यूनतम मान के लिए Oracle विश्लेषणात्मक कार्य

मुझे लगता है कि दो कारणों से रैंक () फ़ंक्शन इसके साथ जाने का तरीका नहीं है।

सबसे पहले, यह संभवतः न्यूनतम ()-आधारित पद्धति से कम कुशल है।

इसका कारण यह है कि क्वेरी को प्रति विभाग सभी वेतनों की एक क्रमबद्ध सूची बनाए रखनी होती है क्योंकि यह डेटा को स्कैन करती है, और बाद में इस सूची को फिर से पढ़कर रैंक दी जाएगी। स्पष्ट रूप से उन अनुक्रमणिकाओं के अभाव में जिनका इसके लिए लाभ उठाया जा सकता है, आप अंतिम डेटा आइटम को पढ़े जाने तक एक रैंक निर्दिष्ट नहीं कर सकते हैं, और सूची का रखरखाव महंगा है।

इसलिए रैंक () फ़ंक्शन का प्रदर्शन स्कैन किए जाने वाले तत्वों की कुल संख्या पर निर्भर है, और यदि संख्या पर्याप्त है कि सॉर्ट डिस्क पर फैल जाता है तो प्रदर्शन गिर जाएगा।

यह शायद अधिक कुशल है:

select dept,
       emp,
       salary
from
       (
       SELECT dept, 
              emp,
              salary,
              Min(salary) Over (Partition By dept) min_salary
       FROM   mytable
       )
where salary = min_salary
/

इस पद्धति के लिए केवल यह आवश्यक है कि क्वेरी अब तक सामने आए न्यूनतम मूल्य के प्रति विभाग एक एकल मान बनाए रखे। यदि एक नया न्यूनतम सामने आता है तो मौजूदा मान को संशोधित किया जाता है, अन्यथा नया मान छोड़ दिया जाता है। मेमोरी में रखे जाने वाले तत्वों की कुल संख्या विभागों की संख्या से संबंधित है, स्कैन की गई पंक्तियों की संख्या से नहीं।

यह हो सकता है कि Oracle के पास यह पहचानने के लिए एक कोड पथ है कि इस मामले में रैंक की गणना करने की वास्तव में आवश्यकता नहीं है, लेकिन मैं इस पर दांव नहीं लगाऊंगा।

रैंक () को नापसंद करने का दूसरा कारण यह है कि यह सिर्फ गलत प्रश्न का उत्तर देता है। सवाल यह नहीं है कि "किस रिकॉर्ड में वेतन है जो पहली रैंकिंग है जब प्रति विभाग वेतन आरोही क्रम में है", यह "किस रिकॉर्ड में वेतन है जो प्रति विभाग न्यूनतम है"। इससे मुझे बहुत फर्क पड़ता है, कम से कम।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. सी # ऐप से ऑरैकल 10 जी डेटाबेस में कनेक्शन जांचें

  2. Oracle में एक इंडेक्स का उपयोग करके एक स्ट्रिंग को उलटना

  3. किसी फ़ंक्शन में मान या संख्यात्मक त्रुटि और मैं पता नहीं लगा सकता कि मैं कहां गलत हो गया हूं Oracle

  4. Oracle प्रक्रिया के भीतर तत्काल निष्पादित करें

  5. डेटाबेस तालिका में कुछ रिकॉर्ड जांचने का सबसे तेज़ तरीका है?