2009-07-21 8 views
5

Currenlty मैं अपने एसपी में बहुत से आंतरिक जॉइन (लगभग 7) का उपयोग कर रहा हूं, क्या इसका स्पैफ पर कोई असर पड़ता है। बाहरी जुड़ाव छोड़ देता है बेहतर perfomance तो आंतरिक शामिल हो जाता है।क्या इनर जॉइन के साथ कोई परफॉर्मेंस मुद्दा है?

एक और बात अगर मैं दो टेबल ए और बी में शामिल हो रहा हूं जिसमें कॉलम आईडी और आईडी 1 है, तो दोनों शून्य नहीं हैं। मुझे लगता है कि मैं इन स्तंभों को अनुक्रमित करने के रूप में आंतरिक जुड़ने के लिए जा सकता हूं।

+0

क्या आपके पास शामिल होने वाली स्थिति के लिए उपयोग किए गए कॉलम पर इंडेक्स हैं (साथ ही साथ किसी भी शर्त के लिए इस्तेमाल किए गए किसी भी कॉलम, जैसे कि खंड में)? यह * वास्तव में * मदद कर सकते हैं। आम तौर पर, मैंने सुना है कि आंतरिक बाएं से प्रदर्शन के लिए बेहतर है - लेकिन इसका उपयोग क्या किया जाना चाहिए उस पर निर्भर करता है कि आप क्या प्राप्त करना चाहते हैं ^^ –

उत्तर

0

इनमें से पहले दो अलग-अलग उद्देश्यों की सेवा के लिए हैं। तो तुलना सभी मामलों में मान्य नहीं हो सकती है।

आप यहां और पढ़ सकते हैं।

Performance tuning SQL Server joins

10

बाहरी मिलती है और अधिक महंगी की तुलना में आंतरिक मिलती हैं। मैं जो कहने जा रहा हूं वह कई लोगों के लिए विवादास्पद होगा। यदि आप डेटाबेस को सही तरीके से ट्यून करते हैं और यदि आप कुछ भी मूर्ख नहीं करते हैं और यदि आप एक पेशेवर ताकत आरडीबीएमएस का उपयोग कर रहे हैं, तो 7 आंतरिक जुड़ना कोई समस्या नहीं होनी चाहिए।

डेटाबेस ट्यूनिंग से मेरा क्या मतलब है? डेटाबेस ट्यूनिंग के लिए बहुत कुछ है लेकिन जांच करने की सबसे स्पष्ट बात यह सुनिश्चित करना है कि आप हमेशा अनुक्रमित कॉलम पर शामिल हों।

मूर्खता से मेरा क्या मतलब है? अपनी जॉइन स्थिति में OR ऑपरेटर का उपयोग न करें। अन्य तालिका में प्राथमिक कुंजी के बराबर एक तालिका में एक विदेशी कुंजी की तरह एक तुलना में अपने जुड़ने को रखने की कोशिश करें। पूर्णांक के रूप में टाइप किए गए अपने सभी प्रमुख फ़ील्ड को रखने का प्रयास करें।

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

+0

फिर विवादास्पद हिस्सा कहां था? जुड़ने की संख्या? मुझे लगता है कि यह केवल इस बात पर निर्भर करता है कि कौन से तालिकाओं में शामिल हो रहे हैं। साथ ही, 'OR' खंडों के बारे में अच्छी सलाह। वे भ्रामक रूप से महंगा हैं, खासकर एसक्यूएल सर्वर में। – Eric

+0

मैंने अतीत में डेवलपर्स के साथ काम किया है, जो मानते थे कि आपको प्रदर्शन कारणों से तीन जुड़ने से आगे नहीं जाना चाहिए। मैं 1 9 80 के दशक में उस पीठ से सहमत हूं लेकिन आज नहीं। – Glenn

3

जॉइन का उपयोग किसी विशेष उद्देश्य & प्रदर्शन के लिए नहीं किया जाता है।

बाएं आउटर जॉइन का उपयोग रिकॉर्ड्स को शामिल करने के लिए किया जाता है, जिसके लिए दाईं ओर तालिका में कोई मिलान रिकॉर्ड नहीं होता है। इनर जॉइन कुछ मानदंडों के आधार पर रिकॉर्डिंग मिलान करता है, दोनों टेबलों में।

+0

बाएं बाहरी जॉइन के बारे में यह छोटी सी बात मेरे लिए बहुत उपयोगी थी। एक INNER जॉइन से एक बाहरी जॉइन में स्विच करने से मेरी क्वेरी 16 सेकंड से 50 एमएस तक काट जाती है। मैं किसी भी शामिल तालिका के कॉलम पर नहीं खोज रहा था, इसलिए यह तथ्य के बाद शामिल हो सकता है। –

0

Glenn said पर फ़ॉलो करने के लिए, यदि आप "मूर्ख सामग्री" में शामिल हो रहे हैं तो अग्रिम में अस्थायी तालिकाओं में निकालने से भी मदद मिल सकती है।

एक डेटाबेस में मैंने अतीत में काम किया था, जिसमें शामिल थे, आंशिक कुंजी पर था (तालिकाओं में समग्र कुंजी थी, यानी इसमें कई स्तंभों के साथ प्राथमिक कुंजी थी) और जहां क्लॉज में अतिरिक्त फ़िल्टरिंग चल रही थी। जहां खंड ने खंडों के सेट को कई अरबों से नीचे देखने के लिए एक हफ्ते में कई हज़ारों तक देखा था। कई हज़ार पंक्तियों की एक मेज पर शामिल होना कई अरबों की तुलना में काफी आसान था। जैसा कि मुझे याद है, क्वेरी समय 20 मिनट से 7 सेकंड तक चला गया।

यह भी ध्यान दें, हमारे पास उप-सहायक उपकरण और यूडीएफ (उपयोगकर्ता परिभाषित फ़ंक्शंस) भी थे - जो संभवतः मूर्खता में जोड़े गए थे।

1

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

यह देखने के लिए कि समस्या कहां है, अपनी निष्पादन योजना भी जांचें।

प्रदर्शन के तरीकों के बारे में अधिक विशिष्ट सलाह के लिए अपनी क्वेरी को ट्यून करें, आपको इसे हमें दिखाना होगा।

0

आम तौर पर महंगा होने का कारण यह है कि इसमें शामिल होने से तालिका के आकार की तुलना में कई टुपल्स बड़े हो सकते हैं।

हालांकि, कभी-कभी एक तालिका में शामिल होने वाले गुण किसी अन्य तालिका में एक अद्वितीय ट्यूपल को कार्यात्मक रूप से निर्धारित करते हैं। इस मामले में, शामिल होना बहुत सस्ता हो सकता है (लेकिन आपको उन विशेषताओं पर अनुक्रमणित करने की आवश्यकता होगी)।

यह आपके द्वारा किए गए जुड़ने की संख्या के बावजूद एक सस्ता संचालन होगा - यह डेटा और डेटा निर्भरताओं का एक मुद्दा है।

चूंकि आप 2 चाबियों में शामिल हो रहे हैं, जहां ऐसा लगता है कि दोनों टेबलों के लिए एक ही कुंजी का उपयोग किया जाता है, यह एक सस्ता ऑपरेशन होना चाहिए चाहे आप किस तरह के शामिल हों।

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