पूछताछ करते समय अनुक्रमित टेबल की तुलना में अनुक्रमित तालिकाएं हैं? [बंद] - एसक्यूएल, डेटाबेस

हम कहते हैं कि हम 2 समान तालिकाओं के साथ हैंलाखों पंक्तियाँ और उनके व्यापारिक लेन-देन हैं, दोनों तालिकाओं की एक ही जानकारी है। यदि एक पंक्ति "बिक्री" या "आदेश" है, तो एक कॉलम निर्दिष्ट करता है, अन्य कॉलम नाम निर्दिष्ट करते हैं (आमतौर पर दोहराया जाता है), तिथि, राशि, कर आदि।

तालिकाओं में डेटा को स्पष्ट रूप से व्यवस्थित नहीं किया जाता है और बिक्री और आदेश और अन्य डेटा किसी भी तरह से सॉर्ट नहीं किए जाते हैं।

एकमात्र अंतर यह है कि तालिकाओं में से एक में एक अतिरिक्त कॉलम होता है जिसमें इसकी अनूठी प्राथमिक कुंजी होती है।

अगर मैं समान क्वेरीज़ के साथ तालिकाओं को एक ही प्रश्न के साथ उद्धृत करता हूं कि "प्राथमिक कुंजी शामिल नहीं है, तो कुछ क्वेरी जिसमें संभवतः शामिल हो सकता है: WHERE कार्रवाई =" बिक्री "और नाम =" बॉब स्मिथ "

उनमें से एक तेजी से होगा कि दूसरे एक सूचकांक सूचकांक के लिए ??

उत्तर:

उत्तर № 1 के लिए 4

हर सूचकांक शुद्ध अतिरेक है जो:

  • लागत भंडारण स्थान,
  • कैश स्थान रखता है जो अन्यथा किसी और चीज़ द्वारा कब्जा किया जा सकता है
  • INSERT / UPDATE / DELETE पर बनाए रखा जाना चाहिए।

यदि इंडेक्स का उपयोग किसी क्वेरी के द्वारा किया जा सकता है, तो स्पीडअप आमतौर पर ऊपर सूचीबद्ध कारकों को बहुत कम कर देता है। इसके विपरीत, यदि सूचकांक का उपयोग नहीं किया जाता है, तो इसका अस्तित्व नहीं होना चाहिए।

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

या तो एक प्राकृतिक प्राथमिक कुंजी की पहचान करने की कोशिश करें जो पहले से ही आपके डेटा में "एम्बेडेड" है, या कम से कम एक बना सरोगेट कुंजी (जैसा आपने टेबल में से एक में किया था)।


1 Strictly speaking, such table does not even एक संबंध का प्रतिनिधित्व करते हैं और यह अब "रिलेशनल" डेटाबेस नहीं है। संबंध की गणितीय अवधारणा एक सेट है, न कि मल्टीसेट, जिसका अर्थ है कि एक तत्व या तो सेट या isn "t में है, लेकिन" टी सेट में कई बार हो सकता है।


उत्तर № 2 के लिए 1

जब आप कॉलम पर शर्तों के साथ क्वेरी कर रहे हैंकौन सा डॉन "उन पर अनुक्रमित है, सैद्धांतिक रूप से आपको पीके की उपस्थिति / अनुपस्थिति की परवाह किए बिना बहुत अधिक प्रदर्शन प्राप्त करना चाहिए। हालांकि, व्यवहार में यह आरडीएमएस कार्यान्वयन पर निर्भर करता है। अपने अनुभव से मैं यह सुनिश्चित कर सकता हूं कि SQLServer में आप देखेंगे। ढेर तालिकाओं (बिना क्लस्टर किए गए कुंजी के साथ तालिका) को क्वेरी करते समय समग्र समग्र प्रदर्शन, ओरेकल हैंडल बहुत बेहतर होता है और मैं उसी प्रदर्शन की उम्मीद करता हूं।


उत्तर № 3 के लिए 1

अनुक्रमित तालिका में एक अतिरिक्त फ़ील्ड है जो डिस्क पर स्थान रखता है।

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

आप अनुमान लगा सकते हैं कि यदि प्रत्येक आधार रिकॉर्ड है100 बाइट्स तब एक प्राथमिक कुंजी के साथ प्रत्येक रिकॉर्ड 104 बाइट्स होगा और समग्र क्वेरी लगभग 4% लंबी होगी (काम पर अन्य कारक हैं, लेकिन यह उच्च स्तर का विचार देता है कि क्या होता है)।

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

सभी ने कहा, मैं इस धारणा का दृढ़ता से समर्थन करता हूं कि तालिकाओं में एक अद्वितीय ऑटो-इन्क्रिमेटेड प्राथमिक कुंजी होनी चाहिए।


जवाब के लिए 0 № 4

यदि तालिका क्वेरी के भाग के लिए आपके द्वारा उपयोग किए जा रहे फ़ील्ड पर अनुक्रमित है, तो एक अनुक्रमित तालिका बहुत तेज़ होगी।

मैसूरल संदर्भ इसे स्पष्ट करता है यहाँ


संबंधित सवाल
सबसे लोकप्रिय