टाइम डायमेंशन टेबल में इंडेक्स कहां रखना चाहिए?


10

इंडेक्स के बारे में इस वेबसाइट से प्रश्न और उत्तर पढ़ने के बाद, एक सवाल मेरे दिमाग में आया।

क्या होगा, अगर कोई दिन के निचले स्तर के साथ समय आयाम तालिका का उपयोग कर रहा है। इंडेक्स को कहां रखना चाहिए?

रैंडी मेलर इस सवाल में: RDBMS पर "इंडेक्स" का क्या अर्थ है? कहा हुआ :

एक इंडेक्स को "सामग्री की तालिका" के रूप में सोचें ... यह एक फ़ाइल, उर्फ ​​ऑफ़सेट में स्थिति के लिए एक आदेशित सूची है

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

मेरा सवाल यह है कि क्या किसी को उन सभी क्षेत्रों के लिए अनुक्रमित करना चाहिए?

दिन को अनोखा माना जाता है, इसलिए इसके लिए मैं पूरी तरह से इंडेक्स के उपयोग को समझता हूं। लेकिन एक सप्ताह की आईडी में 7 घटनाएं होंगी , एक महीने की आईडी में 30/31 घटनाएं होंगी , एक चौथाई आईडी में कम या ज्यादा 120 घटनाएं होंगी ।

  • क्या किसी को अभी भी उन क्षेत्रों के लिए अनुक्रमित करना चाहिए?
  • क्या यह अभी भी उपयोगी होगा?

मैं आपसे यह पूछ रहा हूं क्योंकि उसी सवाल में डेविड स्पिल्ट ने कहा था:

बहुत से अनुक्रमित जोड़ना निश्चित रूप से एक खराब अनुकूलन हो सकता है, क्योंकि अनुक्रमणिका को संग्रहीत करने के लिए उपयोग किए जाने वाले अतिरिक्त स्थान (और IO-load उन्हें बनाए रखने के लिए यदि आपका DB कई लेखन संचालन देखता है) थोड़ा कम इष्टतम पढ़ने वाले प्रश्नों की तुलना में एक बदतर समस्या हो सकती है , इसलिए इसे ज़्यादा मत करो।

तो समय आयाम मामले के लिए सबसे अच्छा विचार क्या होगा?

जवाबों:


7

आप संभवतः लिखने की समस्याओं के मुद्दों में नहीं चलेंगे, क्योंकि मुझे लगता है कि यह एक बार (या प्रति वर्ष एक बार) बनाया जाएगा, और फिर छुआ नहीं गया।

यदि आप सप्ताह से खोज कर रहे हैं, तो एक इंडेक्स का उपयोग करना एक बाधा होने की संभावना है ... समस्या यह है कि, यदि इंडेक्स का उपयोग किया जाता है, तो वह पहले स्कैन कर सकता है, और फिर प्रत्येक रिकॉर्ड को व्यक्तिगत रूप से तालिका से बाहर निकाल सकता है, जिसे आप ' लगभग 5-20% से अधिक अभिलेखों को फिर से खींचना, यह आमतौर पर एक पूर्ण तालिका स्कैन करने के लिए तेज़ है, और फिर उन रिकॉर्डों को छोड़ दें जिनके बारे में आपको परवाह है।

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

मैं संभवत: सप्ताह का दिन सूचकांक नहीं करूंगा । मैं यह देखने के लिए अपने डेटाबेस के दस्तावेज़ीकरण की जाँच करूँगा कि उनका ट्रेडऑफ अनुक्रमित रीड्स बनाम फुल टेबल स्कैन के लिए है या नहीं यह देखने के लिए कि मैं वर्ष के महीने या महीने के दिन को अनुक्रमित करूंगा। यदि संभव हो तो मैं वर्ष के दिन / दिन को अनुक्रमणित करूँगा (जो लगता है कि यह आपका अद्वितीय सूचकांक है, वैसे भी)


5

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


क्या मेरे अलावा किसी ने भी पॉल रैंडल की आवाज को हर बार सुना है या डेटाबेस के संबंध में "यह निर्भर करता है" पढ़ता है? : पी
१०:३४ पर एंड्रयूक्यू

3

सामान्य नियम यह है कि सूचकांक जितना अधिक चयनात्मक होता है (तालिका में पंक्तियों की संख्या से विभाजित स्तंभ में अद्वितीय मानों की संख्या के रूप में परिभाषित की जा रही चयनात्मकता), अधिक संभावना यह है कि इंजन सूचकांक का उपयोग करेगा यदि कोई क्वेरी एक क्लॉज में कॉलम का उपयोग करता है।

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


1

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

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

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