पर एक समग्र सूचकांक बनाने यह ध्यान रखें कि सूचकांक में खेतों के क्रम महत्वपूर्ण है महत्वपूर्ण है।
एक सूचकांक, एक अर्थ में, एक खोज पेड़ है। यदि आप इंडेक्स (बीवेन्ट, बीस्टेट) इंडेक्स करते हैं तो पेड़ "ईवेंट" फ़ील्ड के साथ सभी रिकॉर्ड एक साथ समूह करेगा, फिर उन्हें "राज्य" फ़ील्ड द्वारा ऑर्डर करें।
यदि आप उस सूचकांक को "b.state = x" के लिए क्वेरी करने के लिए थे, तो सूचकांक का उपयोग बहुत कम होगा; सूचकांक पहले "घटना" द्वारा आदेश दिया जाता है।
अपने उदाहरण में:
- फिल्टर यह द्वारा एक है "घटना" क्षेत्र
- A.event में शामिल होने B.event को
- C.id
को B.state में शामिल होने के - शामिल हों B.hur = D.id
- B.event द्वारा आदेश, B.timestamp
ऐसा नहीं है कि अनुकूलन अपने टेबल, और अनुक्रमित के आंकड़ों पर नजर डालेंगे ध्यान देना महत्वपूर्ण है, तो हो सकता है के आदेश फिर से व्यवस्थित जोड़ता है नतीजा वही होगा, लेकिन ऑर्डर अलग प्रदर्शन दे सकता है, और ऑप्टिमाइज़र नौकरी सर्वश्रेष्ठ प्रदर्शन को खोजने का प्रयास करना है।
आपके मामले में मैं बीवेन्ट के आदेश को अत्यंत महत्वपूर्ण होने की अपेक्षा करता हूं। बस क्योंकि यह परिणामी आउटपुट का ऑर्डर है, और यह वह फ़ील्ड है जिसे आप फ़िल्टर करते हैं।
अगला आप बीस्टेट से सीआईडी में शामिल हो जाते हैं। तो सीआईडी पर होने और अनुक्रमण अच्छा है, यह तेजी से जुड़ता है। लेकिन समान रूप से, बी टेबल डेटा को एक अच्छे क्रम में रखने से भी तेजी से जुड़ सकते हैं।
लेकिन, बीवेन्ट पर एक सूचकांक और बीस्टेट पर एक अलग इंडेक्स होने से थोड़ा कम हो सकता है। बीस्टेट इंडेक्स व्यर्थ के बगल में आता है क्योंकि हम बीवेन्ट इंडेक्स का उपयोग कर रहे हैं। यदि आप दोनों को एक इंडेक्स में जोड़ते हैं (b.event तो b.state) निष्पादन योजना इंडेक्स के b.state भाग का उपयोग करने का एक तरीका ढूंढ सकती है।
अंत में, यदि आप इंडेक्स में सभी फ़ील्ड डालते हैं, तो सूचकांक बड़ा हो जाता है, लेकिन क्वेरी को वास्तव में तालिका को देखने की आवश्यकता नहीं हो सकती है। जानकारी सूचकांक में है। 'लापता' फ़ील्ड ढूंढने के लिए इंडेक्स से तालिका में जाने के लिए लिया गया समय शामिल होने के समान है। तो पढ़ने के प्रदर्शन के लिए, सूचकांक में अतिरिक्त फ़ील्ड जोड़ना महत्वपूर्ण संगठन हो सकता है।
मैं अब Wittering हूँ, लेकिन सार है यह:
- आमतौर पर, अलग क्षेत्रों पर अलग सूचकांक एक साथ
आदत हो नहीं है - समग्र अनुक्रमित के लिए, आपको फ़ील्ड को निर्दिष्ट एक फर्क नहीं पड़ता
- इंडेक्स में 'अतिरिक्त' फ़ील्ड जोड़ना इसे बड़ा बनाता है, लेकिन प्रश्नों को तेज़ी से भी बना सकता है
- निष्पादन योजना का क्रम आपकी क्वेरी के आदेश से अधिक मायने रखता है
- लेकिन आपके पास मौजूद इंडेक्स का ऑर्डर निर्धारित कर सकता है निष्पादन योजना
इस तरह के काम में है कोई स्पष्ट जवाब नहीं। यह आपके डेटा पर निर्भर है कि यह एक कला के करीब है।
एक विकल्प इंडेक्स के साथ तालिकाओं को लोड करने के लिए है, परिणामस्वरूप निष्पादन योजना को देखें, और आवश्यक इंडेक्स को हटा दें।
लेकिन यहां तक कि एक चेतावनी लागू होती है। चूंकि निष्पादन योजना डेटा (और तालिका आंकड़े) निर्भर है, इसलिए टेबल में वास्तविक विश्व डेटा होना बहुत महत्वपूर्ण है। जबकि तालिकाओं में 10 'या 100 पंक्तियां हैं, एक निष्पादन योजना सबसे तेज़ हो सकती है। लेकिन जब आपको लाखों पंक्तियां मिलती हैं तो निष्पादन योजना बदल सकती है, और विभिन्न इंडेक्स से लाभ होता है।
सही, लेकिन जांचें कि वास्तव में B.timestamp का उपयोग किया जाएगा या नहीं। – Pomyk
प्रत्येक तालिका में कितने बड़े हैं, और आप किसी दिए गए प्रश्न से कितनी पंक्तियों से मिलान करने की उम्मीद करेंगे। आप किस डेटाबेस का उपयोग कर रहे हैं? –
साथ ही, तालिका में डेटा कितनी बार जोड़ा जाता है और आप क्वेरी को कितनी बार चलाने के लिए चाहते हैं? –