2009-07-10 16 views
43

हैश के बीच प्रदर्शन लाभ/हानि क्या शामिल है और विशेष रूप से ओरेकल आरडीबीएमएस में शामिल हो जाते हैं?हैश में शामिल होने और विलय में शामिल होने के बीच क्या अंतर है (ओरेकल आरडीबीएमएस)?

+2

http://download.oracle.com/docs/cd/B28359_01/server.111/b28274/optimops.htm#i76073 –

+1

http://www.orafaq.com/node/1446 – cagcowboy

+1

http://use-the-index-luke.com/sql/join –

उत्तर

60

एक "सॉर्ट विलय" जॉइन दो डेटा सेट को जॉइन कुंजियों के अनुसार जुड़ने और फिर उन्हें एक साथ विलय करके सॉर्ट करके किया जाता है। विलय बहुत सस्ता है, लेकिन इस तरह का प्रकार निषिद्ध रूप से महंगा हो सकता है, खासकर अगर डिस्क डिस्क पर फैलता है। इस प्रकार की लागत को कम किया जा सकता है यदि किसी डेटा सेट को इंडेक्स के माध्यम से क्रमबद्ध क्रम में एक्सेस किया जा सकता है, हालांकि इंडेक्स स्कैन के माध्यम से तालिका के ब्लॉक के उच्च अनुपात तक पहुंचने से पूर्ण तालिका स्कैन की तुलना में बहुत महंगा हो सकता है ।

एक हैश जॉइन कॉलम में शामिल होने और दूसरे को पढ़ने और मैचों के लिए हैश तालिका की जांच के आधार पर स्मृति में एक डेटा सेट हैशिंग द्वारा किया जाता है। हैश जॉइन बहुत कम लागत है जब हैश टेबल पूरी तरह से स्मृति में आयोजित किया जा सकता है, कुल लागत डेटा सेट पढ़ने की लागत से बहुत कम है। लागत बढ़ जाती है यदि हैश टेबल को एक-पास सॉर्ट में डिस्क पर फेंकना पड़ता है, और मल्टीपास सॉर्ट के लिए काफी बढ़ता है।

हैश जॉइन की लागत को शामिल कुंजी पर दोनों टेबलों को विभाजित करके कम किया जा सकता है। यह ऑप्टिमाइज़र को यह अनुमान लगाने की अनुमति देता है कि एक तालिका में किसी विभाजन से पंक्तियों को केवल दूसरी तालिका के किसी विशेष विभाजन में एक मिलान मिलेगा, और एन विभाजन वाले टेबलों के लिए हैश जॉइन को एन स्वतंत्र हैश में शामिल किया गया है। इसका निम्नलिखित प्रभाव हैं:

  1. प्रत्येक हैश तालिका का आकार कम हो गया है, इसलिए आवश्यक अधिकतम मात्रा में स्मृति को कम करना और संभावित रूप से अस्थायी डिस्क स्थान की आवश्यकता के लिए ऑपरेशन की आवश्यकता को हटा देना।
  2. समांतर क्वेरी ऑपरेशंस के लिए इंटर-प्रोसेस मैसेजिंग की मात्रा बहुत कम हो गई है, सीपीयू उपयोग को कम करने और प्रदर्शन में सुधार, क्योंकि प्रत्येक हैश जॉइन पीक्यू प्रक्रियाओं की एक जोड़ी द्वारा किया जा सकता है।
  3. गैर समांतर क्वेरी ऑपरेशंस के लिए स्मृति की आवश्यकता एन के कारक से कम हो जाती है, और पहले पंक्तियों को पहले क्वेरी से पेश किया जाता है।

आपको ध्यान रखना चाहिए कि हैश जॉइन का उपयोग केवल इक्विटी-जॉइन के लिए किया जा सकता है, लेकिन विलय में विलय अधिक लचीला है।

सामान्य रूप से, यदि आप इक्विटी-जॉइन में बड़ी मात्रा में डेटा में शामिल हो रहे हैं तो एक हैश जॉइन बेहतर शर्त होगी।

यह विषय दस्तावेज़ीकरण में बहुत अच्छी तरह से शामिल है।

http://download.oracle.com/docs/cd/B28359_01/server.111/b28274/optimops.htm#i51523

6

मैं सिर्फ पोस्टरिटी के लिए इसे संपादित करना चाहता हूं कि जब मैंने इस प्रश्न का उत्तर दिया तो ऑरैकल के लिए टैग जोड़े नहीं गए थे। मेरी प्रतिक्रिया एमएस एसक्यूएल पर अधिक लागू थी।

विलय में सबसे अच्छा संभव है क्योंकि यह ऑर्डरिंग का फायदा उठाता है, जिसके परिणामस्वरूप टेबल को शामिल करने के लिए एक ही पास होता है। यदि आपके पास दो टेबल हैं (या इंडेक्स को कवर करते हैं) जिनके पास प्राथमिक कुंजी और उस कुंजी पर किसी तालिका की अनुक्रमणिका जैसी ऑर्डर होती है तो एक मर्ज जॉइन परिणामस्वरूप होगा यदि आपने वह क्रिया की है।

हैश जॉइन अगली सबसे अच्छी है, क्योंकि आमतौर पर ऐसा किया जाता है जब एक टेबल में छोटी संख्या (अपेक्षाकृत) वस्तुएं होती हैं, यह प्रभावी ढंग से प्रत्येक पंक्ति के लिए हैश के साथ एक टेम्पलेट टेबल बनाती है जिसे तब शामिल करने के लिए लगातार खोजा जाता है।

सबसे खराब मामला घोंसला वाला लूप है जो ऑर्डर (एन * एम) है जिसका मतलब है कि शोषण करने के लिए कोई ऑर्डरिंग या आकार नहीं है और जॉइन बस में प्रत्येक पंक्ति के लिए, खोज तालिका वाई में शामिल होने के लिए शामिल है।

+8

यदि कोई हमेशा दूसरे से बेहतर होता, तो दूसरा कभी भी उपयोग नहीं किया जाएगा, क्या आपको नहीं लगता? मुझे लगता है कि अंतर इससे अधिक जटिल है। –

+1

मुझे खेद है अगर आपने मुझे गलत समझा। मैं जुड़ने के प्रकारों का वर्णन करने की कोशिश कर रहा था और क्यों विलय में शामिल होना सबसे अच्छा है। समस्या यह है कि विलय में केवल विलय शामिल होते हैं यदि आपके पास शोषण के लिए सॉर्ट ऑर्डर है और हैश जॉइन केवल अधिक कुशल है जब इसमें शामिल तालिका में अपेक्षाकृत कम पंक्तियां होती हैं। क्षमा करें अगर वह उत्तर में स्पष्ट नहीं था। – Spence

+0

नेस्टेड लूप कोर्स का सबसे खराब है, जब कुछ भी संभव नहीं है। – Spence

संबंधित मुद्दे