हैश के बीच प्रदर्शन लाभ/हानि क्या शामिल है और विशेष रूप से ओरेकल आरडीबीएमएस में शामिल हो जाते हैं?हैश में शामिल होने और विलय में शामिल होने के बीच क्या अंतर है (ओरेकल आरडीबीएमएस)?
उत्तर
एक "सॉर्ट विलय" जॉइन दो डेटा सेट को जॉइन कुंजियों के अनुसार जुड़ने और फिर उन्हें एक साथ विलय करके सॉर्ट करके किया जाता है। विलय बहुत सस्ता है, लेकिन इस तरह का प्रकार निषिद्ध रूप से महंगा हो सकता है, खासकर अगर डिस्क डिस्क पर फैलता है। इस प्रकार की लागत को कम किया जा सकता है यदि किसी डेटा सेट को इंडेक्स के माध्यम से क्रमबद्ध क्रम में एक्सेस किया जा सकता है, हालांकि इंडेक्स स्कैन के माध्यम से तालिका के ब्लॉक के उच्च अनुपात तक पहुंचने से पूर्ण तालिका स्कैन की तुलना में बहुत महंगा हो सकता है ।
एक हैश जॉइन कॉलम में शामिल होने और दूसरे को पढ़ने और मैचों के लिए हैश तालिका की जांच के आधार पर स्मृति में एक डेटा सेट हैशिंग द्वारा किया जाता है। हैश जॉइन बहुत कम लागत है जब हैश टेबल पूरी तरह से स्मृति में आयोजित किया जा सकता है, कुल लागत डेटा सेट पढ़ने की लागत से बहुत कम है। लागत बढ़ जाती है यदि हैश टेबल को एक-पास सॉर्ट में डिस्क पर फेंकना पड़ता है, और मल्टीपास सॉर्ट के लिए काफी बढ़ता है।
हैश जॉइन की लागत को शामिल कुंजी पर दोनों टेबलों को विभाजित करके कम किया जा सकता है। यह ऑप्टिमाइज़र को यह अनुमान लगाने की अनुमति देता है कि एक तालिका में किसी विभाजन से पंक्तियों को केवल दूसरी तालिका के किसी विशेष विभाजन में एक मिलान मिलेगा, और एन विभाजन वाले टेबलों के लिए हैश जॉइन को एन स्वतंत्र हैश में शामिल किया गया है। इसका निम्नलिखित प्रभाव हैं:
- प्रत्येक हैश तालिका का आकार कम हो गया है, इसलिए आवश्यक अधिकतम मात्रा में स्मृति को कम करना और संभावित रूप से अस्थायी डिस्क स्थान की आवश्यकता के लिए ऑपरेशन की आवश्यकता को हटा देना।
- समांतर क्वेरी ऑपरेशंस के लिए इंटर-प्रोसेस मैसेजिंग की मात्रा बहुत कम हो गई है, सीपीयू उपयोग को कम करने और प्रदर्शन में सुधार, क्योंकि प्रत्येक हैश जॉइन पीक्यू प्रक्रियाओं की एक जोड़ी द्वारा किया जा सकता है।
- गैर समांतर क्वेरी ऑपरेशंस के लिए स्मृति की आवश्यकता एन के कारक से कम हो जाती है, और पहले पंक्तियों को पहले क्वेरी से पेश किया जाता है।
आपको ध्यान रखना चाहिए कि हैश जॉइन का उपयोग केवल इक्विटी-जॉइन के लिए किया जा सकता है, लेकिन विलय में विलय अधिक लचीला है।
सामान्य रूप से, यदि आप इक्विटी-जॉइन में बड़ी मात्रा में डेटा में शामिल हो रहे हैं तो एक हैश जॉइन बेहतर शर्त होगी।
यह विषय दस्तावेज़ीकरण में बहुत अच्छी तरह से शामिल है।
http://download.oracle.com/docs/cd/B28359_01/server.111/b28274/optimops.htm#i51523
मैं सिर्फ पोस्टरिटी के लिए इसे संपादित करना चाहता हूं कि जब मैंने इस प्रश्न का उत्तर दिया तो ऑरैकल के लिए टैग जोड़े नहीं गए थे। मेरी प्रतिक्रिया एमएस एसक्यूएल पर अधिक लागू थी।
विलय में सबसे अच्छा संभव है क्योंकि यह ऑर्डरिंग का फायदा उठाता है, जिसके परिणामस्वरूप टेबल को शामिल करने के लिए एक ही पास होता है। यदि आपके पास दो टेबल हैं (या इंडेक्स को कवर करते हैं) जिनके पास प्राथमिक कुंजी और उस कुंजी पर किसी तालिका की अनुक्रमणिका जैसी ऑर्डर होती है तो एक मर्ज जॉइन परिणामस्वरूप होगा यदि आपने वह क्रिया की है।
हैश जॉइन अगली सबसे अच्छी है, क्योंकि आमतौर पर ऐसा किया जाता है जब एक टेबल में छोटी संख्या (अपेक्षाकृत) वस्तुएं होती हैं, यह प्रभावी ढंग से प्रत्येक पंक्ति के लिए हैश के साथ एक टेम्पलेट टेबल बनाती है जिसे तब शामिल करने के लिए लगातार खोजा जाता है।
सबसे खराब मामला घोंसला वाला लूप है जो ऑर्डर (एन * एम) है जिसका मतलब है कि शोषण करने के लिए कोई ऑर्डरिंग या आकार नहीं है और जॉइन बस में प्रत्येक पंक्ति के लिए, खोज तालिका वाई में शामिल होने के लिए शामिल है।
यदि कोई हमेशा दूसरे से बेहतर होता, तो दूसरा कभी भी उपयोग नहीं किया जाएगा, क्या आपको नहीं लगता? मुझे लगता है कि अंतर इससे अधिक जटिल है। –
मुझे खेद है अगर आपने मुझे गलत समझा। मैं जुड़ने के प्रकारों का वर्णन करने की कोशिश कर रहा था और क्यों विलय में शामिल होना सबसे अच्छा है। समस्या यह है कि विलय में केवल विलय शामिल होते हैं यदि आपके पास शोषण के लिए सॉर्ट ऑर्डर है और हैश जॉइन केवल अधिक कुशल है जब इसमें शामिल तालिका में अपेक्षाकृत कम पंक्तियां होती हैं। क्षमा करें अगर वह उत्तर में स्पष्ट नहीं था। – Spence
नेस्टेड लूप कोर्स का सबसे खराब है, जब कुछ भी संभव नहीं है। – Spence
- 1. दो एसक्यूएल में शामिल होने के बीच क्या अंतर है?
- 2. कहां और शामिल होने के बीच क्या अंतर है?
- 3. लिंक में शामिल होने और "ओल्ड स्टाइल" प्री एएनएसआई सिंटैक्स में शामिल होने के बीच क्या अंतर है?
- 4. नेस्टेड लूप में शामिल होने और हैश एसक्यूएल सर्वर 2008
- 5. में शामिल होने के साथ और
- 6. अंतर में शामिल होने और जहां चयन में SQL विवरण
- 7. Django ForeignKey शामिल होने, और शामिल होने के
- 8. आंतरिक शामिल होने और बाहरी एसक्यूएल स्टेटमेंट्स में शामिल होने की तुलना करें
- 9. ओरेकल पेड़ में अन्य तालिकाओं में शामिल होने से प्रश्नों
- 10. लिंक: == के बीच क्या अंतर है और इसमें शामिल होने के बराबर है?
- 11. हाइबरनेट वैकल्पिक में शामिल होने के - स्तंभ मान में शामिल होने के किसी भी तरह से
- 12. MySQL: इनर बनाम में शामिल होने कहाँ
- 13. PostgreSQL आत्म में शामिल होने
- 14. OneToMany - तालिका और विदेशी कुंजी में शामिल होने के बीच अंतर क्या हैं?
- 15. योग और भीतरी करें में शामिल होने
- 16. सिग्नलआर और समूह में शामिल होने
- 17. थ्रेड नींद और धागा में शामिल होने
- 18. Mysql में शामिल होने और योग परिणाम
- 19. इनर सी # में DataTables के शामिल होने
- 20. बैश में शामिल होने के आदेश
- 21. अद्यतन मूल्य शामिल होने
- 22. शामिल होने पर फ़िल्टरिंग?
- 23. सकल या में शामिल होने के तार
- 24. RelativeLayout में मेरे शामिल होने में क्या गलत है?
- 25. एसक्यूएल सर्वर: के बीच क्रॉस शामिल हों और पूर्ण बाहरी शामिल हों क्या अंतर है?
- 26. कैसे छोड़ दिया करने के लिए शामिल होने या भीतरी एक मेज ही में शामिल होने
- 27. PHP के बीच क्या अंतर है और इसमें शामिल है?
- 28. में शामिल होने से 2 एक
- 29. हाइबरनेट मदद क्वेरी में शामिल होने
- 30. फोर्क में शामिल होने की मेमोरी दृश्यता
http://download.oracle.com/docs/cd/B28359_01/server.111/b28274/optimops.htm#i76073 –
http://www.orafaq.com/node/1446 – cagcowboy
http://use-the-index-luke.com/sql/join –