मुझे सूचकांक रणनीतियों पर कुछ मार्गदर्शन कहां मिल सकता है?


22

हम में से अधिकांश शायद इस बात से सहमत होंगे कि डेटाबेस इंडेक्स का उपयोग करना अच्छा है। बहुत सारे सूचकांक और प्रदर्शन को वास्तव में नीचा दिखाया जा सकता है।

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


7
अनुक्रमण पर मार्गदर्शन के लिए, उपयोग-the-index-luke.com
माइक शेरिल 'कैट रिकॉल'

जवाबों:


24

कम

"बहुत अधिक अनुक्रमित" नियम मुझे लगता है कि थोड़ा भ्रामक है।

लंबा

यह देखते हुए कि औसत डेटाबेस लगभग 98% पढ़ता है (या उच्चतर) रीड्स को अनुकूलित करने की आवश्यकता है। उदाहरण के लिए, यदि कोई अद्वितीय सूचकांक है, तो INSERT पढ़ा जाता है। या एक अद्यतन पर कहाँ। मैंने एक बार पढ़ा कि सघन डेटाबेस अभी भी 85% पढ़ता है।

आपके पास क्या है खराब गुणवत्ता अनुक्रमण है। उदाहरण:

  • विस्तृत क्लस्टर इंडेक्स (विशेष रूप से SQL सर्वर)
  • गैर-मोनोटोनिक गुच्छेदार अनुक्रमित
  • अतिव्यापी अनुक्रमित (जैसे cold, coleऔरcold, cole, colf)
  • कई सिंगल कॉलम इंडेक्स (अधिक उपयोगी इंडेक्स के साथ ओवरलैपिंग भी) जो आपके प्रश्नों के लिए बेकार हैं
  • कोई INCLUDE, कवर नहीं (उदाहरण के लिए सभी एकल स्तंभ अनुक्रमणिका)
  • ...

ध्यान दें कि OLTP सिस्टम में भी आपके वास्तविक डेटा की तुलना में कई गुना अधिक अनुक्रमित होना विशिष्ट है।

आम तौर पर, मैं के साथ शुरू होगा

  • क्लस्टर इंडेक्स (आमतौर पर पीके)
  • अद्वितीय अनुक्रमणिका (बाधा नहीं, इन्हें कवर नहीं किया जा सकता)
  • विदेशी कुंजी कॉलम

तब मैं देखूंगा:

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

यह कहते हुए कि, मैंने कुछ प्रणालियों के लिए इन नियमों को तोड़ दिया है, यह देखने के बाद कि कैसे चीजों को एक प्रणाली को ट्यून करने के लिए (10 बिलियन पंक्तियों के बाद)। लेकिन मैं कभी भी अनुक्रमण पर विचार नहीं करता जब तक कि मैं यह प्रदर्शित नहीं कर सका कि मैं ऐसा क्यों कर रहा हूं।


2
आपको वे नंबर कहां से मिले? 98% भयानक रूप से उच्च लगता है, विशेष रूप से "बड़े डेटा" की उम्र में (उर्फ सब कुछ स्टोर करता है और आशा है कि यह किसी दिन उपयोगी है)
rm

7

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


7

काफी सरल लेखों की सबसे अच्छी श्रृंखला में से एक है जिस पर अनुक्रमणिका को चुना गया है और गेल शॉ द्वारा क्यों होगा। आप यहां क्लिक करके लेख पा सकते हैं

आपके द्वारा पूछे गए प्रश्न का उत्तर 50 विभिन्न तरीकों से दिया जा सकता है। यह वास्तव में आपके पास मौजूद डेटा के लिए उबलता है और इसे कैसे समझा जाएगा। एक सामान्य नियम यह है कि आपको ढेर से बचने के लिए हमेशा प्रत्येक टेबल पर एक क्लस्टर इंडेक्स होना चाहिए। क्लस्टर किए गए इंडेक्स आमतौर पर यथासंभव छोटे होने चाहिए। यदि तालिका में क्लस्टर अनुक्रमणिका है, तो गैर-संकुल अनुक्रमणिका के पत्ती पृष्ठों पर सभी सूचकांक रिकॉर्ड, बुकमार्क लुकअप के लिए संबंधित संकुल सूचकांक के रिकॉर्ड मूल्य को संग्रहीत करेंगे। यदि एक टेबल एक ढेर है तो SQL बुकमार्क लुकअप के लिए एक विशिष्ट पहचानकर्ता बनाएगा। मुझे यह याद नहीं है कि यह 8 या 16 बाइट्स है। यह अंत में एक बहुत बड़ा डेटाटाइप हो सकता है तो एक INT कहो। एक ढेर टेबल पर 8 गैर-क्लस्टर किए गए अनुक्रमित होने की कल्पना करें।


पाठकों के लिए बस एक नोट: MS SQL "बुकमार्क लुकअप" Oracle के "ACCESS BY ROWID" के बराबर है। देखें stackoverflow.com/a/820731/122727
kubanczyk

5

मैं यहां जोड़ना चाहता हूं कि अलग-अलग डेटाबेस को अलग-अलग रणनीतियों की आवश्यकता होती है। उदाहरण के लिए आइए MySQL w / InnoDB और PostgreSQL की तुलना करें।

InnoDB

InnoDB टेबल मूल रूप से प्राथमिक कुंजी का एक बी-ट्री इंडेक्स है जिसे इंडेक्स प्रविष्टि में पंक्ति जानकारी शामिल करने के लिए बढ़ाया जाता है। भौतिक आदेश स्कैन समर्थित नहीं हैं और सभी स्कैन तार्किक क्रम में होते हैं। इसका मतलब है दो चीजें:

  1. इनोडब में एक अनुक्रमिक स्कैन बहुत सारे यादृच्छिक डिस्क I / O उत्पन्न करता है , और

  2. प्राथमिक कुंजी सूचकांक की परवाह किए बिना होना चाहिए चाहे एक माध्यमिक सूचकांक का उपयोग कर रहा हो।

  3. किसी भी अन्य दृष्टिकोण की तुलना में इस मॉडल में प्राथमिक कुंजी लुकअप तेजी से होते हैं।

इस मामले में बहु-पृष्ठ तालिकाओं में पर्याप्त फ़ील्ड को अनुक्रमित करना बहुत महत्वपूर्ण है। विशिष्ट नियम वह सब कुछ है जिसे आप फ़िल्टर करना चाहते हैं।

PostgreSQL

PostgreSQL हीप फ़ाइलों का उपयोग करता है, प्रति फ़ाइल एक टेबल (कुछ टेबल कई फाइलें हो सकती हैं) जहां उस ढेर के खाली स्थान से ट्यूपल आवंटित किए जाते हैं। भौतिक क्रम स्कैन समर्थित हैं। काम करने के लिए तार्किक ऑर्डर स्कैन के लिए, एक इंडेक्स जोड़ा जाना चाहिए।

PostgreSQL में प्राथमिक कुंजी मूल रूप से अनूठे अनुक्रमों का एक सबसेट है, जहां कोई मान NULL नहीं हो सकता है। UNIQUE बाधाओं को अंतर्निहित अनुक्रमितों का उपयोग करके किया जाता है, और कई अन्य सूचकांक प्रकारों को सूचकांक में संभव विभिन्न कार्यों के साथ समर्थित किया जाता है।

इसका मतलब है की:

  1. प्राथमिक कुंजी लुकअप, एक अनुक्रमणिका फ़ाइल और एक टेबल फ़ाइल को टटोलते हुए एक बहुत बड़ी सारणी मानते हुए । यह MySQL के दृष्टिकोण से काफी धीमा है जहां सूचकांक को केवल ट्रैवर्स किया जाना चाहिए और इंडेक्स में पंक्ति समाहित है।

  2. भौतिक ऑर्डर स्कैन बहुत बेहतर प्रदर्शन करते हैं, यादृच्छिक डिस्क I / O को कम करते हैं जहां महत्वपूर्ण संख्या में पंक्तियों को संसाधित किया जाना है।

  3. द्वितीयक सूचकांक स्कैन MySQL से बेहतर प्रदर्शन करते हैं क्योंकि तालिका के भौतिक भाग को प्राप्त करने के लिए केवल एक सूचकांक का पता लगाया जाना चाहिए।

इस मॉडल में, इंडेक्स अक्सर आवश्यक होते हैं लेकिन इंडेक्स का उपयोग करने पर प्लानर को अधिक स्वतंत्रता होती है, और एक का उपयोग नहीं करने के निहितार्थ अक्सर बहुत गंभीर होते हैं। तालिकाओं को आम तौर पर अनुकूलित किया जाता है (पाइक लुकअप में विशेषज्ञता के बजाय) और इसलिए बहुत कम अनुक्रमित की आवश्यकता होती है।

टी एल; डॉ

अपने RDBMS को जानें।


4

2

यहां तक ​​कि उपरोक्त सभी लिंक के साथ, आपको यह देखने की जरूरत है कि किम्बर्ली ट्रिप ने इंडेक्स की देखभाल, खिलाने और उपयोग के बारे में क्या लिखा है।

शुरुआत के लिए, किम्बर्ली के सूचकांक-संबंधित ब्लॉग पोस्ट के संग्रह के लिए इस लिंक का पालन करें । आप अपने ब्राउज़र विंडो के बाईं ओर "इस पृष्ठ पर" और "श्रेणियाँ" विगेट्स का उपयोग करके विशिष्ट विषयों का पता लगाने में सक्षम हैं।

यहां बहुत सारी जानकारी है, लेकिन इसके बारे में डेडिकेटेड मत बनो।

किम्बर्ली के बारे में पृष्ठ यहाँ है


हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.