दस्तावेज़ीकरण के अनुसार NUM_ROWS "तालिका में पंक्तियों की संख्या" . है , इसलिए मैं देख सकता हूं कि यह कैसे भ्रमित करने वाला हो सकता है। हालाँकि, इन दोनों विधियों में एक बड़ा अंतर है।
यह क्वेरी सिस्टम दृश्य से MY_TABLE में पंक्तियों की संख्या का चयन करती है। यह वह डेटा है जिसे Oracle ने पहले एकत्र और संग्रहीत किया है।
select num_rows from all_tables where table_name = 'MY_TABLE'
यह क्वेरी MY_TABLE में पंक्तियों की वर्तमान संख्या की गणना करती है
select count(*) from my_table
परिभाषा के अनुसार वे डेटा के अंतर टुकड़े हैं। NUM_ROWS के बारे में आपको दो अतिरिक्त जानकारी की आवश्यकता है।
-
दस्तावेज़ीकरण में स्तंभ नाम से एक तारांकन चिह्न है, जो इस नोट की ओर ले जाता है:
<ब्लॉककोट>तारक (*) से चिह्नित कॉलम केवल तभी भरे जाते हैं जब आप ANALYZE स्टेटमेंट या DBMS_STATSpackage के साथ टेबल पर आंकड़े एकत्र करते हैं।
इसका मतलब यह है कि जब तक आप टेबल पर आंकड़े एकत्र नहीं करते हैं तब तक इस कॉलम में कोई डेटा नहीं होगा।
-
डिफ़ॉल्ट
estimate_percent
. के साथ 11g+ में एकत्रित आंकड़े , या 100% अनुमान के साथ, उस समय के लिए एक सटीक संख्या लौटाएगा। लेकिन आंकड़े 11g से पहले या कस्टमestimate_percent
. के साथ एकत्र किए गए 100% से कम, गतिशील नमूने का उपयोग करता है और गलत हो सकता है। यदि आप 99.999% एकत्र करते हैं तो एक पंक्ति छूट सकती है, जिसका अर्थ है कि आपको जो उत्तर मिलता है वह गलत है।
अगर आपकी टेबल कभी नहीं . है अद्यतन किया गया है तो तालिका में पंक्तियों की संख्या का पता लगाने के लिए ALL_TABLES.NUM_ROWS का उपयोग करना निश्चित रूप से संभव है। हालांकि , और यह एक बड़ी बात है, यदि कोई प्रक्रिया आपकी तालिका से पंक्तियों को सम्मिलित या हटाती है तो यह सबसे अच्छा अनुमान होगा और इस पर निर्भर करता है कि आपका डेटाबेस स्वचालित रूप से आंकड़े एकत्र करता है या नहीं, यह बहुत ही गलत हो सकता है।
सामान्यतया, सिस्टम तालिकाओं पर निर्भर होने के बजाय तालिका में पंक्तियों की संख्या को वास्तव में गिनना हमेशा बेहतर होता है।