दिलचस्प पोस्ट
जावास्क्रिप्ट सेट टाइमआउट बहुत गलत क्यों है? jQuery में गहरे बच्चे का चयन करें सभी संदर्भों के साथ अनुक्रम को कैसे लोड करने के लिए विधानसभा को लोड करें? उंगली, एंड्रॉइड द्वारा कैनवस में ड्रा करें $ $ हैशके ने मेरे JSON.stringify परिणाम में क्या जोड़ा है शून्य लंबाई सरणियां मानक JSON एपीआई प्रतिक्रिया प्रारूप? एचटीएमएल / सीएसएस: दो फ्लोटिंग डिवेल को समान ऊँचाई बनाना मैं बिना प्रोग्राम किए गए परिवर्तनों को कैसे निर्धारित करूं? नेटबिंस में "असंगत स्रोत कोड" रनटाइम एक्सप्शन आभासी फ़ंक्शन डिफ़ॉल्ट तर्क व्यवहार Git हुक को रिपॉजिटरी में डाल देना Guice का उपयोग करते हुए सामान्य कार्यान्वयन इंजेक्शन गतिशील रूप से विद्यमान टैब फिर से बनाने के बिना चमकदार रूप से भूखंडों के साथ टैब बनाना सीएसएस का उपयोग करके एचआईएल और ब्लू इम्ग एंड डिव का HTML

विदेशी कुंजी क्या क्वेरी प्रदर्शन में सुधार?

मान लीजिए मेरे पास 2 तालिकाओं, उत्पाद और उत्पाद श्रेणी हैं दोनों तालिकाओं में श्रेणी आईडी पर संबंध है और यह क्वेरी है

select p.ProductId, p.Name, c.CategoryId, c.Name AS Category from Products p inner join ProductCategories c on p.CategoryId = c.CategoryId where c.CategoryId = 1; 

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

इसलिए मुझे उत्पादों पर सूचकांक बनाना होगा। जब मैं निष्पादन योजना फिर से बनाऊँ, तो दोनों तालिकाओं में इंडेक्स की तलाश होती है। और अनुमानित उपट्री लागत बहुत कम हो जाती है

मेरे प्रश्न हैं:

  1. एफके के पास संबंध की बाधा में मदद करता है, क्या इसका कोई अन्य उपयोगिता है? क्या यह क्वेरी प्रदर्शन को बेहतर बनाता है?

  2. क्या मैं सभी तालिकाओं में सभी एफके कॉलम पर इंडेक्स बनाऊं?

वेब के समाधान से एकत्रित समाधान "विदेशी कुंजी क्या क्वेरी प्रदर्शन में सुधार?"

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

विदेशी कुंजी में सुधार (और चोट) प्रदर्शन कर सकते हैं

  1. जैसा कि यहां बताया गया है: विदेशी कुंजी को प्रदर्शन को बढ़ावा देते हैं

  2. लुकअप को कम करने के लिए आपको हमेशा एफके कॉलम पर अनुक्रमित बनाना चाहिए। एसक्यूएल सर्वर स्वचालित रूप से ऐसा नहीं करता है

संपादित करें

चूंकि लिंक अब मरने लगता है (क्रिस की ओर ध्यान देने के लिए) , निम्नलिखित में से पता चलता है कि विदेशी कुंजी सुधार (और चोट) प्रदर्शन क्यों कर सकती है

विदेशी कुंजी प्रदर्शन में सुधार कर सकते हैं

विदेशी कुंजी बाधा डेटा पढ़ने के समय प्रदर्शन में सुधार करते हैं, लेकिन साथ ही डेटा डालने / संशोधित करने / हटाने के समय प्रदर्शन को धीमा कर देती है।

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

डेटाबेस ईमानदारी सुनिश्चित करने के लिए एक विदेशी कुंजी एक डीबीएमएस अवधारणा है

किसी भी प्रदर्शन के प्रभाव / सुधार डेटाबेस तकनीक के लिए विशिष्ट होंगे और एक विदेशी कुंजी के प्रयोजन के लिए माध्यमिक हैं।

एसक्यूएल सर्वर में यह अच्छा अभ्यास है कि यह सुनिश्चित करने के लिए कि सभी विदेशी कुंजी उनके पास कम से कम एक गैर संकुल अनुक्रमणिका है।

मुझे उम्मीद है कि यह आपके लिए चीजों को साफ करता है, लेकिन कृपया अधिक जानकारी के अनुरोध के लिए स्वतंत्र महसूस करें।

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

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

तो यह:

  select p.ProductId, p.Name, c.CategoryId, c.Name AS Category from Products p inner join ProductCategories c on p.CategoryId = c.CategoryIdwhere c.CategoryId = 1; 

यह बनता है:

 SELECT p.ProductId, p.Name, c.CategoryId, c.Name AS Category FROM ProductCategories c LEFT OUTER JOIN Products P ON c.CategoryId = p.CategoryId WHERE c.CategoryId = 1; 

यह छोटे प्रश्नों में जरूरी बड़ा प्रदर्शन नहीं करेगा, लेकिन जब टेबल बड़ी हो जाए तो यह अधिक कुशल हो सकता है।

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

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

एसक्यूएल सर्वर 2008 के रूप में, विदेशी कुंजी, जिस तरह से डेटाबेस इंजन क्वेरी को अनुकूलित करने का विकल्प चुनते हैं, उसे प्रभावित करके प्रदर्शन को प्रभावित कर सकता है। निम्नलिखित आलेख में स्टार से जुड़ें Heuristics को देखें: https://technet.microsoft.com/en-us/library/2008.04.dwperformance.aspx