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
. डालकर इस पर काम किया जाना चाहिए सबक्वेरी में है।