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

मैं Oracle में row_number को कैसे गति दे सकता हूँ?

ROW_NUMBER Oracle . में काफी अक्षम है ।

प्रदर्शन विवरण के लिए मेरे ब्लॉग में लेख देखें:

  • ओरेकल:ROW_NUMBER बनाम ROWNUM

आपकी विशिष्ट क्वेरी के लिए, मैं आपको इसे ROWNUM . से बदलने की सलाह दूंगा और सुनिश्चित करें कि अनुक्रमणिका का उपयोग किया गया है:

SELECT  *
FROM    (
        SELECT  /*+ INDEX_ASC(t index_on_column) NOPARALLEL_INDEX(t index_on_column) */
                t.*, ROWNUM AS rn
        FROM    table t
        ORDER BY
                column
        )
WHERE rn >= :start
      AND rownum <= :end - :start + 1

यह क्वेरी COUNT STOPKEY use का उपयोग करेगी

यह भी सुनिश्चित करें कि आप column अशक्त नहीं है, या WHERE column IS NOT NULL add जोड़ें हालत।

अन्यथा सभी मानों को पुनः प्राप्त करने के लिए अनुक्रमणिका का उपयोग नहीं किया जा सकता है।

ध्यान दें कि आप ROWNUM BETWEEN :start and :end . का उपयोग नहीं कर सकते हैं बिना सबक्वेरी के।

ROWNUM हमेशा अंतिम असाइन किया जाता है और अंतिम चेक किया जाता है, इस प्रकार ROWNUM हमेशा अंतराल के बिना क्रम में आते हैं।

अगर आप ROWNUM BETWEEN 10 and 20 . का इस्तेमाल करते हैं , पहली पंक्ति जो अन्य सभी शर्तों को पूरा करती है, लौटने के लिए एक उम्मीदवार बन जाएगी, जिसे अस्थायी रूप से ROWNUM = 1 के साथ सौंपा गया है और ROWNUM BETWEEN 10 and 20 . के परीक्षण में असफल हो जाते हैं ।

फिर अगली पंक्ति एक उम्मीदवार होगी, जिसे ROWNUM = 1 . के साथ सौंपा जाएगा और विफल, आदि, इसलिए, अंत में, कोई भी पंक्तियाँ वापस नहीं की जाएंगी।

ROWNUM . डालकर इस पर काम किया जाना चाहिए सबक्वेरी में है।



  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 पोर्ट को पोर्ट 8080 . से बदलें

  2. Oracle में SQL क्वेरी के इनपुट के रूप में फ़ाइल से पढ़े गए मान पास करें

  3. दो तिथियों के बीच तिथियां उत्पन्न करना

  4. ओरेकल एसक्यूएल में गतिशील धुरी - प्रक्रिया

  5. PostgreSQL बनाम Oracle:लागत में अंतर, उपयोग में आसानी और कार्यक्षमता