सबसे पहले, मुझे बताएं कि मैं कोई फायरबर्ड विशेषज्ञ नहीं हूं, इसलिए मैं SQL सर्वर के काम के आधार पर जवाब दे रहा हूं।
उस स्थिति में, उत्तर हाँ, और नहीं दोनों है।
इंडेक्स निश्चित रूप से SQL सर्वर पर अपडेट किए गए हैं, इस अर्थ में कि यदि आप कोई नई पंक्ति डालते हैं, तो उस तालिका के सभी अनुक्रमणिका में उस पंक्ति होगी, इसलिए यह पाए जाएगा। तो मूल रूप से, आपको उस भाग के लिए काम करने के लिए तालिकाओं को फिर से रखने की आवश्यकता नहीं है। वह "नहीं" हिस्सा है।
समस्या, हालांकि, सूचकांक के साथ नहीं है, लेकिन आंकड़ों के साथ। आप कह रहे हैं कि आपको तालिकाओं को फिर से संशोधित करने की आवश्यकता है, लेकिन फिर आप कोड दिखाते हैं जो आंकड़ों का उपयोग करता है, और यही कारण है कि मैं जवाब दे रहा हूं।
संक्षिप्त उत्तर यह है कि समय के साथ-साथ आंकड़े धीमे हो जाते हैं। वे उस बिंदु पर बिगड़ नहीं सकते हैं जहां वे अनुपयोगी हैं, लेकिन जब आप उन्हें फिर से बनाते/पुन: गणना करते हैं तो वे उस पूर्ण स्तर से बिगड़ जाएंगे जब वे होते हैं। वह "हां" हिस्सा है।
पुरानी आंकड़ों के साथ मुख्य समस्या यह है कि यदि सूचकांक में चाबियों का वितरण भारी रूप से बदल जाता है, तो आंकड़े तुरंत इसे उठा नहीं सकते हैं, और इस प्रकार क्वेरी ऑप्टिमाइज़र पुराने इंडेक्स के आधार पर गलत इंडेक्स चुन देगा, बालों, आंकड़ों के आंकड़े हाथ पर हैं।
उदाहरण के लिए, मान लें कि आपके इंडेक्स में से एक के आंकड़े आंकड़े हैं जो कहता है कि चाबियाँ वैल्यू स्पेस के एक छोर पर एक साथ चिपक जाती हैं (उदाहरण के लिए, 0 और 1 के बहुत से इंट-कॉलम)। फिर आप मूल्यों के साथ बहुत सारी पंक्तियां डालते हैं जो इस सूचकांक को पूरे स्पेक्ट्रम में फैलाने वाले मानों को शामिल करते हैं।
यदि अब आप एक क्वेरी करते हैं जो किसी अन्य तालिका से जुड़ने का उपयोग करता है, तो निम्न इंडेक्स के साथ तालिका के विरुद्ध कम चयनकता (0 और 0 के बहुत सारे) वाले कॉलम पर, क्वेरी ऑप्टिमाइज़र यह समझ सकता है कि यह अनुक्रमणिका अच्छा, क्योंकि यह कई पंक्तियों को लाएगा जो एक ही समय में उपयोग किए जाएंगे (वे एक ही डेटा पेज पर हैं)।
हालांकि, डेटा बदल गया है, इसलिए यह प्रासंगिक टुकड़ों को खोजने के लिए सभी इंडेक्स पर कूद जाएगा, और इस प्रकार सभी के बाद इतना अच्छा नहीं होगा।
आंकड़ों को पुन: गणना करने के बाद, क्वेरी ऑप्टिमाइज़र देख सकता है कि यह अनुक्रमणिका इस क्वेरी के लिए उप-इष्टतम है, और इसके बजाय एक और अनुक्रमणिका चुनें, जो अधिक उपयुक्त है।
असल में, यदि आपका डेटा प्रवाह में है तो आपको समय-समय पर आंकड़ों को फिर से समझना होगा। यदि आपका डेटा शायद ही कभी बदलता है, तो आपको शायद इसे अक्सर करने की आवश्यकता नहीं है, लेकिन मैं अभी भी कुछ नियमितता के साथ एक रखरखाव नौकरी जोड़ूंगा जो ऐसा करता है।
फ़ायरबर्ड से खुद को ऐसा करने के लिए पूछना संभव है या नहीं, फिर, मैं पतली बर्फ पर हूं, लेकिन मुझे संदेह है कि वहां है। एसक्यूएल सर्वर में आप रखरखाव नौकरियां स्थापित कर सकते हैं जो इसे शेड्यूल पर करते हैं, और कम से कम आप विंडोज शेड्यूलर से बैच फ़ाइल को इस तरह कुछ करने के लिए लात मारने में सक्षम होना चाहिए।
बस एक नोट। इस प्रक्रिया में SUSPEND अनावश्यक है। –
धन्यवाद! मुझे लगता है कि मैंने इसे कहीं से कॉपी किया है। – pablo
असल में, आप रीइंडेक्सिंग नहीं कर रहे हैं लेकिन केवल इंडेक्स आंकड़ों को फिर से समझते हैं। बड़ी टेबल पर रीइंडेक्सिंग बहुत धीमी हो सकती है। आंकड़ों की गणना करना हमेशा तेज़ होता है। –