हमारा प्रोजेक्ट बहुत बड़ा, बहुत जटिल डेटाबेस चलाता है। इसलिए लगभग एक महीने पहले, हमने देखा कि अशक्त मानों वाले अनुक्रमित स्तंभों द्वारा उपयोग किया जाने वाला स्थान बहुत बड़ा हो रहा था। उस पर प्रतिक्रिया के रूप में, मैंने स्क्रिप्ट के रूप में लिखा था जो गतिशील रूप से सभी सिंगल-कॉलम इंडेक्स के माध्यम से खोज करेगा जिसमें 1% से अधिक शून्य मान होंगे, फिर उन इंडेक्स को फ़िल्टर्ड इंडेक्स के रूप में इस शर्त पर ड्रॉप और रीक्रिएट करें कि मान शून्य नहीं था। यह पूरे डेटाबेस में सैकड़ों अनुक्रमितों को गिराएगा और फिर से बनाएगा और आम तौर पर पूरे डीबी द्वारा उपयोग किए जाने वाले अंतरिक्ष के लगभग 15% को मुक्त करेगा।
अब मेरे पास इस बारे में दो प्रश्न हैं:
ए) इस फैशन में फ़िल्टर्ड इंडेक्स का उपयोग करने के डाउनसाइड क्या हैं? मैं यह मानूंगा कि यह केवल प्रदर्शन में सुधार करेगा, लेकिन क्या कोई प्रदर्शन जोखिम शामिल हैं?
बी) हमें त्रुटियां मिलीं ( 'इंडेक्स को ड्रॉप नहीं कर सकता एक्सवाईजेड बीयूज यह मौजूद नहीं है या आपके पास अनुमति नहीं है' ) इंडेक्स को छोड़ने और पुन: बनाने पर, भले ही बाद में जांच की गई हो, सब कुछ बिल्कुल उम्मीद के मुताबिक चला गया था। ये केसे हो सकता हे?
किसी भी मदद के लिए धन्यवाद!
संपादित करें: @Thomas Kejser के जवाब में
हाय और धन्यवाद, लेकिन यह पता चला है कि यह एक आपदा थी। उस समय हमें कई चीजें समझ में नहीं आईं:
- एक क्वेरी के दौरान, SQLOS यह निर्धारित करने से पहले सूचकांक योजना बनाता है कि यह तालिका कॉलम में शामिल होने के लिए NULL मान का उपयोग नहीं कर सकता है। IE, आपको वास्तव में क्वेरी में उपयोग किए गए प्रत्येक और हर फ़िल्टर किए गए इंडेक्स के लिए सूचकांक को फिट करने वाले WHERE क्लॉज़ की आवश्यकता है, या इंडेक्स का उपयोग बिल्कुल भी नहीं किया जाएगा।
- अनुक्रमित करना और बनाना और फिर से अपने आँकड़ों को फिर से अपडेट करना, फिर भी अद्यतन योजनाओं का उत्पादन करने के लिए पर्याप्त नहीं हो सकता है, जो हमने माना था कि वे करेंगे। ऐसा लगता है कि कुछ मामलों में केवल एक उच्च पर्याप्त कार्यभार SQL सर्वर को योजनाओं को आश्वस्त करने के लिए मजबूर करेगा।
- निष्पादन योजनाकार की कार्यक्षमता के लिए कुछ एक्सोटिक्स हैं जो अकेले सामान्य ज्ञान और तर्क द्वारा निर्धारित करना मुश्किल है। विभिन्न प्रश्नों के हजारों-कोड-पीछे-भिन्न रूपों के साथ भी, प्रतीत होता है कि बेकार सूचकांक कुछ आंकड़ों और क्वेरी योजनाओं में मदद कर सकते हैं जो महत्वपूर्ण प्रश्नों में उपयोग किए जा रहे हैं।
अंत में, इन परिवर्तनों को वापस कर दिया गया। इसलिए फ़िल्टर किए गए इंडेक्स एक शक्तिशाली उपकरण हैं, लेकिन आपको वास्तव में यह समझने की आवश्यकता है कि उन कॉलमों से क्या डेटा प्राप्त किया जा रहा है। जहां अंतरिक्ष मुद्दों से अलग सामान्य सूचकांक लागू करने में आसान होते हैं, फ़िल्टर किए गए अनुक्रमित बहुत अनुकूलित समाधानों का प्रतिनिधित्व करते हैं। वे निश्चित रूप से एक नियमित सूचकांक के लिए एक प्रतिस्थापन नहीं हैं, बल्कि उन विशेष परिस्थितियों में उनके लिए एक विस्तार जो वे आवश्यक हैं।