विषय-सूची
Oracle में नेस्टेड लूप जॉइन क्या है
-पहली पंक्ति स्रोत में प्रत्येक पंक्ति के लिए दूसरी पंक्ति स्रोत से सभी पंक्तियों तक पहुँच प्राप्त करें। ड्राइव करने के लिए या सम्मिलित पंक्ति स्रोत से मिलान करने वाली पंक्ति की खोज करने के लिए।
-OLTP प्रकार के लेन-देन के लिए सर्वश्रेष्ठ
-यह सबसे तेज़ होगा यदि पहली तालिका से लौटाई गई पंक्तियाँ छोटी हों
-नेस्टेड लूप जॉइन इन Oracle 11g अलग तरह से काम करता है। इसके बारे में विवरण इस लेख में दिया गया है
नेस्टेड लूप कैसे जुड़ता है oracle में काम करता है
-ऑरेकल ऑप्टिमाइज़र पहले ड्राइविंग टेबल को निर्धारित करता है और इसे बाहरी लूप के रूप में नामित करता है। यह ड्राइविंग पंक्ति स्रोत है। यह शामिल होने की स्थिति को चलाने के लिए पंक्तियों का एक सेट तैयार करता है। पंक्ति स्रोत इंडेक्स स्कैन या पूर्ण तालिका स्कैन का उपयोग करके एक्सेस की गई तालिका हो सकती है। पंक्तियों को किसी अन्य ऑपरेशन से भी बनाया जा सकता है। उदाहरण के लिए नेस्टेड लूप जॉइन से आउटपुट को एक पंक्ति स्रोत के रूप में उपयोग किया जा सकता है।
- ऑप्टिमाइज़र अन्य तालिका को आंतरिक लूप के रूप में नामित करता है। यह बाहरी लूप से लौटाई गई प्रत्येक पंक्ति के लिए पुनरावृत्त होता है। यह एक टेबल पर एक एक्सेस ऑपरेशन है और आदर्श रूप से एक इंडेक्स स्कैन होना चाहिए।
- INNER टेबल द्वारा किया गया ऑपरेशन OUTER टेबल में लौटाई गई प्रत्येक पंक्ति के लिए दोहराया जाता है
for x in (select from outer table) loop for row in (select from inner table ) loop joined output rows is returned where condition is matched end loop end loop
नेस्टेड लूप जॉइन उदाहरण
select /* +use_nl( a b) */ a.emp_no,b.dept_no,b.dept_name from emp a,dept b where a.dept_no=b.dept_no; SELECT STATEMENT NESTED LOOP TABLE ACCESS FULL DEPT TABLE ACCESS BY INDEX ROWID EMP INDEX RANGE SCAN EMP_N1
इसे कैसे संसाधित किया जाता है
(1) DEPT में पहली पंक्ति पढ़ें
(2) dept_no के मिलान के लिए EMP_N1 पर इंडेक्स स्कैन करें और पहली पंक्ति प्राप्त करें
(3) EMP में संदर्भित पंक्ति देखें और जानकारी में शामिल हों और प्रदान करें आउटपुट
(4) लौटाए गए प्रत्येक पंक्ति के लिए ऑपरेशन 2,3 दोहराएं
(5) डीईपीटी में सभी पंक्तियों के लिए ऑपरेशन 1,2,3,4 दोहराएं
x in के लिए (तालिका विभाग से चयन करें)
loop
पंक्ति के लिए (तालिका emp से चयन करें)
loop
ज्वाइन आउटपुट पंक्तियों को वापस किया जाता है जहां स्थिति का मिलान होता है
अंत लूप
एंड लूप
यहां टेबल एम्प से चयन के लिए एक्सेस विधि इंडेक्स स्कैन के माध्यम से होगी
यदि ऑप्टिमाइज़र किसी अन्य जॉइन विधि का उपयोग करना चुन रहा है, तो आप USE_NL (ए बी) संकेत का उपयोग कर सकते हैं, जहां ए और बी टेबल के उपनाम हैं शामिल किया जा रहा है।
लागत गणना
NESTED LOOPS जॉइन में, बाहरी रो सेट में प्रत्येक पंक्ति के लिए, इनर रो सेट को शामिल होने के लिए सभी मेल खाने वाली पंक्तियों को खोजने के लिए एक्सेस किया जाता है। इसलिए, इस प्रकार के जुड़ाव में, आंतरिक पंक्ति सेट को बाहरी पंक्ति सेट में पंक्तियों की संख्या जितनी बार एक्सेस किया जाता है।
लागत :तालिका A तक पहुंचने की लागत + तालिका A X से वापस आने वाली पंक्तियों की संख्या तालिका B तक पहुंचने की लागत
तो यह लागत प्रभावी होगा यदि बाहरी तालिका से छोटी पंक्तियों को वापस कर दिया जाता है और आंतरिक तालिका के लिए एक्सेस ऑपरेशन अद्वितीय स्कैन या छोटे इंडेक्स रेंज स्कैन के माध्यम से होता है
नेस्टेड लूप के लिए Oracle 11g में शामिल होने का नया तरीका
SELECT STATEMENT NESTED LOOPS NESTED LOOPS TABLE ACCESS FULL DEPT INDEX UNIQUE SCAN EMP_IDX TABLE ACCESS BY INDEX ROWID EMP
Oracle के दस्तावेज़ इस बारे में यही कहते हैं
जब कोई अनुक्रमणिका या तालिका ब्लॉक बफ़र कैश में नहीं होता है और जुड़ने को संसाधित करने के लिए आवश्यक होता है, तो एक भौतिक I/O की आवश्यकता होती है। Oracle डेटाबेस 11g रिलीज़ 1 (11.1) में, Oracle डेटाबेस कई भौतिक I/O अनुरोधों को बैच सकता है और उन्हें एक बार में संसाधित करने के बजाय एक वेक्टर I/O का उपयोग करके संसाधित कर सकता है। नेस्टेड लूप जॉइन के लिए नए कार्यान्वयन के हिस्से के रूप में, दो नेस्टेड लूप्स जॉइन रो स्रोत निष्पादन योजना में दिखाई दे सकते हैं जहां केवल एक पूर्व रिलीज़ में दिखाई देता है। ऐसे मामलों में, Oracle डेटाबेस एक NESTED LOOPS जॉइन रो सोर्स को आवंटित करता है, जो टेबल के बाहरी तरफ से मानों को जोड़ने के लिए आंतरिक साइड पर इंडेक्स के साथ जुड़ता है। पहले शामिल होने के परिणाम में शामिल होने के लिए एक दूसरी पंक्ति स्रोत आवंटित किया जाता है, जिसमें ऑरैकल इंडेक्स में संग्रहीत पंक्तियाँ शामिल होती हैं, जिसमें शामिल होने के अंदरूनी हिस्से पर तालिका होती है"
नेस्टेड लूप बाहरी Oracle में शामिल होते हैं
-नेस्टेड लूप के समान
- यदि आंतरिक लूप में मानदंडों को पूरा करने वाली कोई पंक्तियाँ नहीं हैं, तो भी पंक्तियाँ वापस आ जाती हैं
-नेस्टेड लूप के विपरीत जो किसी भी तालिका से संचालित हो सकता है, यह एक तरह से शामिल होता है
a =b(+) हमेशा b से पहले a पर जाएगा, इसके परिणामस्वरूप अधिक महंगी योजना (संभवतः गैर-एनएल) हो सकती है
(+) हमेशा खराब पक्ष पर जाती है
यह भी पढ़ता है
हैश जॉइन
ओरेकल में जॉइन मेथड
https://en.wikipedia.org/wiki/Nested_loop_join