शामिल कॉलम बनाम फ़िल्टर्ड इंडेक्स


11

वर्तमान में हम tb_tranfers नाम की तालिका के साथ काम करते हैं । इस तालिका में 40 मिलियन पंक्तियाँ हैं और यह ~ 26 GB आकार (11 GB डेटा, 15 GB अनुक्रमित) है।

10 से 15% पंक्तियाँ नरम-हटाई गई पंक्तियाँ ( DeletedDate null नहीं है)। एप्लीकेटन केवल उन पंक्तियों का उपयोग करता है जहाँ हटाए गए ड्राफ्ट को शून्य है। इस तालिका के सभी प्रश्नों में उस प्रभाव का एक खंड शामिल होगा।

इस टेबल पर 15 इंडेक्स हैं। अनुपलब्ध अनुक्रमणिका DMV में शामिल कॉलम के रूप में हटाए गए दिनांक के साथ अनुक्रमणिका बनाने के लिए सुझाव शामिल हैं।

क्या WHERE DeleteDdate IS NULLसभी 11 गैर-अनुक्रमित अनुक्रमितों पर फ़िल्टर किए गए सूचकांक का उपयोग करना उपयोगी होगा ? या फिर डिलेटेड कॉलम को सम्मिलित कॉलम के रूप में रखना बेहतर होगा ?

जवाबों:


12

हां, सभी 11 एनसी इंडेक्स को फ़िल्टर किए गए इंडेक्स को संशोधित करना (CREATE INDEX ... ON ... WHERE DeletedDate IS NULL ) को मदद मिलेगी। इस तरह से आपको दो फायदे मिलेंगे:

  • क्वेरी ऑप्टिमाइज़र को पता चल जाएगा कि इन अनुक्रमित से आने वाली कोई भी पंक्ति पहले से है करता DeletedDate पर आपकी क्वेरी फिल्टर संतुष्ट हैं, इसलिए दोबारा जांच DeletedDate को संकुल अनुक्रमणिका देखने के लिए नहीं करना होगा
  • सभी NC इंडेक्स आकार में 10-15% छोटे होंगे, जिसमें कम मेमोरी और कम IO ऑपरेशन की आवश्यकता होती है।

व्यापार बंद यह है कि कोई भी क्वेरी जो नरम हटाई गई पंक्तियों के बाद दिखती है (और कुछ क्वेरी होनी चाहिए, अन्यथा पंक्तियाँ मौजूद क्यों हैं?) इन NC इंडेक्स का उपयोग करने में असमर्थ होगी।


7

यदि आप हमेशाDeletedDate IS NULL अपने प्रश्नों में फ़िल्टर का उपयोग करते हैं , तो हाँ आपको फ़िल्टर जोड़कर एक महत्वपूर्ण प्रदर्शन वृद्धि की संभावना होगी।

यह इंजन के लिए प्रासंगिक पंक्तियों को खोजने के लिए जाँच करने के लिए बहुत कम पृष्ठ हैं, जिसका अर्थ कम आईओ (और अधिक गति) है।

इसे एक INCLUDEDक्षेत्र के रूप में जोड़ना बेकार होगा । चूँकि आप इसे फ़िल्टर में हमेशा शामिल करते हैं, (लेकिन शायद इसे सेलेक्ट लिस्ट में शामिल नहीं करते हैं), उस क्षेत्र को कभी भी संदर्भित नहीं किया जाएगा यदि आप इसे एक के रूप में जोड़ते हैं INCLUDE


2

चूंकि 85-90% पंक्तियों में DeletedDate NULL हैं, इसलिए यह संभावना नहीं है कि इस सूचकांक का उपयोग करने के लिए SQL के लिए केवल DeletedDate वाले किसी अनुक्रमणिका का चयन पर्याप्त होगा। हालांकि, अन्य अधिक चयनात्मक स्तंभों के साथ संयोजन में उपयोग किया जाता है, मौजूदा अनुक्रमितों में हटाए गए डीटेट को जोड़कर यदि सूचकांक की समग्र चयनात्मकता को बढ़ाता है तो इसे कुछ लाभ देना चाहिए।

जेएनके के अनुसार, जब तक आप इसे सेलेक्ट क्लॉज में इस्तेमाल नहीं करते, तब तक इंडेक्स को कवर करने में डीलेटेड का बहुत कम उपयोग होगा।

यह देखते हुए कि डेटा के लिए अनुक्रमित के लिए पहले से ही अधिक संग्रहण है, आप यह भी देखना चाहते हैं कि क्या मौजूदा 15 NC इंडेक्स में कोई अतिरेक है या नहीं।

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