विषय-सूची
Oracle में हैश जॉइन क्या है?
हैश जॉइन का उपयोग तब किया जाता है जब जॉइनिंग बड़ी टेबल या जॉइन के लिए अधिकांश जॉइन टेबल पंक्तियों की आवश्यकता होती है। इसका उपयोग केवल समानता में शामिल होने के लिए किया जाता है
ओरेकल हैश जॉइन के लिए एल्गोरिथम
1) ऑप्टिमाइज़र मेमोरी में हैश टेबल बनाने के लिए 2 टेबलों में से छोटी टेबल का उपयोग करता है। छोटी टेबल को बिल्ड टेबल कहा जाता है
निर्माण चरण
छोटे टेबल लूप में प्रत्येक पंक्ति के लिए
जॉइन की पर हैश मान की गणना करें
उपयुक्त हैश बकेट में पंक्ति डालें।
एंड लूप;
2) फिर बड़ी तालिकाओं को स्कैन करता है और शामिल पंक्तियों को खोजने के लिए हैश मान (बड़ी तालिका से पंक्तियों की) की तुलना इस हैश तालिका से करता है। बड़ी तालिका को जांच तालिका कहा जाता है
जांच चरण
बड़े टेबल लूप में प्रत्येक पंक्ति के लिए
जॉइन की पर हैश मान की गणना करें
हैश मान के लिए हैश तालिका की जांच करें
यदि मिलान पाया जाता है
रिटर्न पंक्तियां
एंड लूप;पी>
उपरोक्त स्पष्टीकरण सही है जब हैश तालिका विकसित हो रही है पूरी तरह से स्मृति में फिट बैठती है। यदि हैश तालिका उपलब्ध स्मृति में फिट होने के लिए बहुत बड़ी है, तो ओरेकल प्रसंस्करण को थोड़ा अलग तरीके से करता है। मूल रूप से यदि हैश तालिका है उपलब्ध मेमोरी में फिट होने के लिए बहुत बड़ा Oracle के पास इसे बैचों में डिस्क में सहेजने के लिए एक तंत्र है (जिसे विभाजन कहा जाता है) और जांच तालिका को मिलान बैचों में डिस्क में सहेजने के लिए, फिर मिलान करने वाले बैचों के बीच टुकड़े-टुकड़े में शामिल हों
मूल रूप से जब हैश क्षेत्र भर जाता है, तो Oracle को TEMP टेबलस्पेस का उपयोग करने की आवश्यकता होगी। Oracle हैश में सबसे बड़े विभाजन का चयन करेगा और उसे TEMP को लिखेगा। Oracle स्मृति में संपूर्ण हैश तालिका का बिटमैप-जैसी अनुक्रमणिका रखता है। यह अनुक्रमणिका केवल यह जानती है कि किसी दिए गए हैश बकेट (हैश तालिका में स्थान) के लिए कोई मान है या नहीं। लेकिन अनुक्रमणिका का वास्तविक मान नहीं है।
इसलिए यदि दूसरी या जांच तालिका से एक पंक्ति इनमें से किसी एक स्थान पर हैश हो जाती है तो केवल एक चीज जो ज्ञात है वह यह है कि एक संभावित मिलान है। हैश तालिका के निर्माण की प्रक्रिया तब तक जारी रहती है जब तक कि पूरी हैश तालिका पूरी नहीं हो जाती। हैश तालिका का हिस्सा स्मृति में है और भाग डिस्क पर है
अब Oracle प्रोब या अन्य टेबल को पढ़ना शुरू करता है और ज्वाइन की का हैश बनाना शुरू करता है। यदि हैश की मेमोरी में हैश के साथ मेल खाती है, तो जॉइन पूरा हो जाता है और रो वापस आ जाता है। यदि रो संभावित मैच है तो ऑरैकल इस पंक्ति को TEMP टेबलस्पेस पर उसी विभाजन योजना में संग्रहीत करेगा जैसा कि पहली पंक्ति डेटा रखा गया था।
एक बार जब संपूर्ण माध्यमिक तालिका का पहला पास हो जाता है और स्मृति में हैश तालिका में सभी पंक्तियां दी जाती हैं, तो ओरेकल डिस्क में मिलान करने वाले विभाजन को देखना शुरू कर देगा और यह प्रत्येक विभाजन को एक-एक करके संसाधित करेगा और स्मृति में पंक्तियों को पढ़ेगा और आउटपुट को प्रोसेस करें
Oracle में शामिल हों हैश उदाहरण:
सेलेक्ट /* +use_hash(a b) */ a.emp_no,b.dept_no,b.dept_name से emp a,dept b जहां a.dept_no=b.dept_no;Plan---------- --------------------------------------- स्टेटमेंटहैश जॉइंटेबल एक्सेस फुल एम्पटेबल एक्सेस फुल डिपार्टमेंट चुनें पूर्व>Oracle में हैश के शामिल होने की प्रक्रिया कैसे की जाती है
1) पहली ईएमपी तालिका को स्कैन और हैश किया जाता है
2) प्रत्येक पंक्ति के लिए विभाग तालिका स्कैन की जाती है और हैश रखने के लिए हैश बनाया जाता है dept_no
3) dept_no हैश का हैश तालिका में मिलान किया जाता है , यदि कोई मिलान पाया जाता है, तो जुड़ी हुई पंक्तियाँ लौटा दी जाती हैंओरेकल हैश जॉइन हिंट
Oracle ने हैश जॉइन के उपयोग के लिए बाध्य करने के लिए संकेत उपयोग_हैश प्रदान किया है।
उपयोगचयन /* +use_hash(तालिका उपनाम) */ ......यह ऑप्टिमाइज़र को बताता है कि जब "table_alias" शामिल होने के क्रम में अगली पंक्ति स्रोत है, तो शामिल होने की विधि का उपयोग हैश जॉइन होना चाहिए; हालांकि यह अनुकूलक को यह नहीं बताता कि क्या उस पंक्ति स्रोत को बिल्ड टेबल या जांच तालिका के रूप में इस्तेमाल किया जाना चाहिए।
यह निर्दिष्ट करने के लिए कि पंक्ति स्रोत का उपयोग कैसे किया जाता है, आपको दूसरे संकेत की आवश्यकता है:no_swap_join_inputs ("table_alias") यदि आप चाहते हैं कि Oracle जांच तालिका के रूप में पंक्ति स्रोत का उपयोग करे, या swap_join_inputs ("table_alias") यदि आप चाहते हैं कि Oracle इसे बिल्ड के रूप में उपयोग करे टेबल
Oracle में हैश जॉइन के बारे में कुछ महत्वपूर्ण बिंदु
1) हैश जॉइन परिणाम का आउटपुट तात्कालिक नहीं है क्योंकि हैश टेबल बनाने पर हैश जॉइनिंग अवरुद्ध है। एक बार हैश टेबल बिल्ड पूरा हो जाने के बाद, पंक्तियों को तेजी से लौटाया जाता है
2)हैश जॉइन को आमतौर पर ALL_ROWS ऑप्टिमाइज़र के साथ देखा जाता है मोड, क्योंकि यह हैश टेबल में कम से कम एक टेबल की सभी पंक्तियों के हैश होने के बाद परिणाम दिखाने के मॉडल पर काम करता है।
3)हैश टेबल निजी मेमोरी है इसलिए डेटा एक्सेस करने में ज्यादा लैचिंग गतिविधि नहीं होती हैहैश जॉइन की लागत =तालिका A के पढ़ने की लागत +पढ़ने की तालिका B की लागत + स्मृति में कुछ छोटी प्रसंस्करण
नेस्टेड लूप और हैश जॉइन के बीच अंतर
हैश जॉइन करें | नेस्टेड जॉइन |
हैश जॉइन का उपयोग तब किया जाता है जब जॉइनिंग बड़ी टेबल या जब जॉइन के लिए अधिकांश जॉइन टेबल पंक्तियों की आवश्यकता होती है। इसका उपयोग केवल समानता में शामिल होने के लिए किया जाता है | NESTED LOOPS Join एक जॉइन ऑपरेशन है जो चयनित प्रारंभिक पंक्ति स्रोत से एक पंक्ति का चयन करता है और इस पंक्ति स्रोत के मानों का उपयोग ड्राइव करने के लिए या सम्मिलित पंक्ति स्रोत से मिलान करने वाली पंक्ति की खोज करने के लिए करता है। -OLTP प्रकार के लेनदेन के लिए सर्वश्रेष्ठ |
जब बहुत सारे रिकॉर्ड वापस किए जाते हैं, तो हैश ऑपरेशन दो डेटासेट के लिए सामान्य रूप से कुशल होता है। | जब एक डेटासेट में कोई या छोटी संख्या नहीं होती है, तो रिकॉर्ड वापस आ जाते हैं और अन्य डेटासेट का मिलान इंडेक्स ऑपरेशन का उपयोग करके किया जा सकता है, तो नेस्टेड लूप जॉइन अधिक कुशल होता है |
आप ALL_ROWS ऑप्टिमाइज़र मोड के साथ उपयोग किए गए अधिक हैश जॉइन देख सकते हैं, क्योंकि यह हैश तालिका में कम से कम एक तालिका की सभी पंक्तियों को हैश किए जाने के बाद परिणाम दिखाने के मॉडल पर काम करता है।टीडी> | FIRST_ROWS ऑप्टिमाइज़र मोड का उपयोग करते समय आप नेस्टेड लूप का अधिक उपयोग देखेंगे क्योंकि यह उपयोगकर्ता को तात्कालिक परिणाम दिखाने के मॉडल पर काम करता है क्योंकि वे लाए जाते हैं। उपयोगकर्ता को वापस करने से पहले किसी भी डेटा को कैशिंग करने का चयन करने की कोई आवश्यकता नहीं है। हैश जॉइन के मामले में इसकी आवश्यकता है और इसे नीचे समझाया गया है। |