2009-11-16 12 views
15

जैसा कि मुझे this post से समझा गया है, ऐसे कुछ परिदृश्य हैं जहां विदेशी कुंजी क्वेरी प्रदर्शन में सुधार कर सकती हैं।क्या विदेशी कुंजी क्वेरी प्रदर्शन को नुकसान पहुंचा सकती हैं

मैंने विपरीत दावा सुना है कि, संदर्भित अखंडता जांच के कारण, विदेशी कुंजी वास्तव में क्वेरी प्रदर्शन को चोट पहुंचा सकती हैं। किस परिस्थिति में (यदि बिल्कुल) यह सच है?


1) शब्द की क्वेरी भ्रामक प्रतीत होती है। मुझे सभी प्रकार के प्रदर्शन दंड में दिलचस्पी है।

2) क्या किसी के पास INSERT, DELETE या UPDATE स्टेटमेंट्स पर नकारात्मक प्रभाव के बारे में कोई वास्तविक दुनिया संख्या है (मुझे पता है कि यह विशिष्ट सिस्टम पर निर्भर करता है, लेकिन फिर भी किसी भी प्रकार के असली दुनिया के माप की सराहना की जाएगी)?

+3

"क्वेरी" से, क्या आपका मतलब है चुनें? क्योंकि मुझे लगता है कि रेफरेंसियल अखंडता जांच केवल प्रदर्शन के संदर्भ में INSERT/अद्यतन/हटाएगी को प्रभावित करेगी। –

उत्तर

11

मुझे लगता है कि INSERT प्रश्नों के लिए, बाधाओं - विदेशी कुंजी बाधाओं सहित - कुछ हद तक प्रदर्शन धीमा कर देगा। डेटाबेस को यह जांचना है कि जो भी आपने इसे डालने के लिए कहा है वह कुछ ऐसा है जो आपकी बाधाओं को सम्मिलित करने की अनुमति देता है।

चयन प्रश्नों के लिए, विदेशी कुंजी बाधाओं को प्रदर्शन में कोई बदलाव नहीं करना चाहिए।

चूंकि INSERTS लगभग हमेशा बहुत तेज़ होते हैं, इसलिए अतिरिक्त समय की थोड़ी सी मात्रा फ्रेइंग मामलों को छोड़कर ध्यान देने योग्य नहीं होगी। (कई गीगाबाइट डेटाबेस बनाना, आप बाधाओं को अक्षम करना चाहते हैं और फिर बाद में पुनः सक्षम करना चाहते हैं, जब तक आप सुनिश्चित हों कि डेटा अच्छा है।)

4

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

आपको चुनिंदा प्रश्नों पर प्रदर्शन सुधारने के लिए उन्हें अनुक्रमणित करने की आवश्यकता होगी।

2

यदि विदेशी कुंजी के इस तरह से कोई प्रभाव पड़ा, तो यह INSERTS पर होगा। जब डेटाबेस बनाए जाते हैं/संशोधित होते हैं, तो डेटाबेस चयनित नहीं होने पर विदेशी कुंजी पर रेफरेंशियल जांच करता है।

0

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

2

विदेशी कुंजी अधिकांश मामलों में क्वेरी प्रदर्शन को प्रभावित नहीं करती हैं, और दृढ़ता से अनुशंसा की जाती है। सामान्यीकरण की सहायता से, आप अनावश्यक डेटा को खत्म कर देंगे, और यदि आप अंतर्निहित इंडेक्स (उचित विदेशी कुंजी के लिए) जोड़कर अनुसरण करते हैं तो आपको अपने प्रश्नों पर अच्छा प्रदर्शन मिलेगा।

विदेशी कुंजी क्वेरी ऑप्टिमाइज़र को किसी दिए गए प्रश्न के लिए सर्वोत्तम क्वेरी योजनाएं प्राप्त करने में सहायता कर सकती हैं।

विदेशी कुंजी जांच एक कारक है जब आप अपना डेटा अपडेट करते हैं (जो एक अलग विचार है - मुझे लगता है कि आपकी चिंता प्रश्न है - जब तक कि आप दोनों शब्द पूछताछ न करें)।

4

INSERT/अद्यतन/संक्षिप्त उत्तर के लिए, "हां" है। डेटाबेस को यह जांचने की आवश्यकता होगी कि रेफरेंसियल अखंडता बरकरार है और निर्माण/संशोधन की अनुमति है। या डेलेटी के मामले में, कुछ कैस्केडिंग किया जा सकता है।

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

19

अगर एक विदेशी कुंजी रेफेरेंन्शिअल सत्यनिष्ठा के लिए आवश्यक है तो विदेशी कुंजी की उपस्थिति प्रदर्शन

के लिए आधारभूत आप के साथ-साथ अगर एक कार तेजी से अगर आप में सीटों डाल नहीं जा सकते हैं पूछ सकते हैं फार्म चाहिए - एक अच्छी तरह से गठित कार में सीटों को शामिल किया गया है, जैसे कि अच्छी तरह से गठित डेटाबेस में विदेशी कुंजी

5

सिद्धांत रूप में, हाँ: डेटा लिखने से बाधाओं को प्रमाणित करने की आवश्यकता होती है।

अभ्यास में, शायद ही कभी: जब तक मापा जाता है और साबित नहीं होता है, तो आप मान सकते हैं कि कोई प्रदर्शन प्रभाव नहीं है।

  • बुरा स्कीमा डिजाइन (लापता अनुक्रमित, बुरा संकुल अनुक्रमणिका पसंद)
  • विवाद (अवरुद्ध), फिर बुरा स्कीमा डिजाइन (तालिका स्कैन ताला संघर्ष की गारंटी)
  • की वजह से: घने, प्रदर्शन की समस्याओं अन्य समस्याओं के कारण होते हैं एक अच्छी तरह से डिजाइन स्कीमा और अच्छे प्रश्नों की कमी की लागत बहुत उच्च प्रवाह क्षमता पर दिखाने शुरू कर देंगे पर
  • बुरा क्वेरी डिजाइन

। जब ऐसा होता है, तो निवारक उपाय होते हैं।

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

+0

सहमत हुए। हालांकि प्रदर्शन डेटाबेस के लिए वास्तव में महत्वपूर्ण है, यह डेटा अखंडता को कभी भी ट्रम्प नहीं करना चाहिए। अविश्वसनीय डेटा को तुरंत सम्मिलित करने की आवश्यकता क्या है? – HLGEM

0

यदि आप एफके क्षेत्र को प्रभावित करने वाले रेफरेंसियल अखंडता, आईएनएसईआरटी और अद्यतनों को लागू कर रहे हैं, तो धीमे हो जाएंगे। हालांकि, आमतौर पर चिंता करने के लिए बहुत कुछ नहीं है, खासकर जब बहुत से डीबी 80% पढ़े/20% लिखते हैं। यह भुगतान करने के लायक मूल्य भी है।

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

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

3

विदेशी कुंजी जांच अधिकांश लोगों के विचार से अधिक समय लेती है। ओरेकल 11 जी के साथ एक वर्तमान परीक्षण और दो विदेशी कुंजियों वाली एक तालिका से पता चला कि 800,000 पंक्तियों के डालने के लिए समय में सक्षम विदेशी चाबियों के साथ 60 सेकंड लग गए थे लेकिन विदेशी कुंजी के बिना केवल 20 सेकंड थे। (विदेशी कुंजी स्तंभों को निश्चित रूप से अनुक्रमित किया गया था)

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

+0

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

0

विदेशी कुंजी सम्मिलन और परिवर्तन को धीमा करती है, क्योंकि प्रत्येक विदेशी कुंजी संदर्भ को सत्यापित किया जाना चाहिए। डीबीएमएस विदेशी कुंजी इंडेक्सिंग का उपयोग करता है या नहीं, इस पर निर्भर करता है कि विदेशी कुंजी या तो चयन को प्रभावित नहीं कर सकती हैं, या इसे तेज़ी से बढ़ सकती हैं।

विदेशी कुंजी को हटाने पर एक जटिल प्रभाव पड़ता है। यदि आप उस चीज़ को हटा रहे हैं जो विदेशी कुंजी को संदर्भित करता है, तो यह किसी भी चीज़ को प्रभावित नहीं करेगा, लेकिन यदि आप जो भी हटा रहे हैं उसे किसी अन्य पंक्ति/तालिका में किसी विदेशी कुंजी द्वारा संदर्भित किया जाता है, तो यह आमतौर पर समस्याएं पैदा करेगा।

विदेशी कुंजी तालिका निर्माण और परिवर्तनों में मामूली प्रदर्शन गिरावट का कारण बन सकती है।

बेशक, यह सब मानते हैं कि विदेशी कुंजी सत्यापन उपयोग में है।

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