यहां उन चीजों की आसान सूची दी गई है जो मैं हमेशा किसी ऐसे व्यक्ति को देता हूं जो मुझसे ऑप्टिमाइज़ेशन के बारे में पूछता है।
हम मुख्य रूप से Sybase का उपयोग करते हैं, लेकिन अधिकांश सलाह पूरे बोर्ड पर लागू होगी।
SQL सर्वर, उदाहरण के लिए, कई प्रदर्शन निगरानी/ट्यूनिंग बिट्स के साथ आता है, लेकिन अगर आपके पास ऐसा कुछ नहीं है (और शायद अगर आप भी करते हैं) तो मैं निम्नलिखित पर विचार करूंगा...
99% समस्याएं मैंने देखा है कि एक जॉइन में बहुत अधिक टेबल डालने के कारण होते हैं . इसके लिए फिक्स आधा जुड़ना (कुछ तालिकाओं के साथ) करना है और परिणामों को अस्थायी तालिका में कैश करना है। फिर उस अस्थायी तालिका में शामिल होने वाली शेष क्वेरी करें।
क्वेरी ऑप्टिमाइज़ेशन चेकलिस्ट
- अनिवार्य तालिकाओं पर अद्यतन आँकड़े चलाएँ
- कई सिस्टम इसे एक निर्धारित साप्ताहिक कार्य के रूप में चलाते हैं
- अंतर्निहित तालिकाओं से रिकॉर्ड हटाएं (संभवतः हटाए गए रिकॉर्ड को संग्रहीत करें)
- इसे दिन में एक बार या सप्ताह में एक बार अपने आप करने पर विचार करें।
- सूचकांक का पुनर्निर्माण करें
- टेबल्स का पुनर्निर्माण करें (बीसीपी डेटा आउट/इन)
- डेटाबेस को डंप / पुनः लोड करें (कठोर, लेकिन भ्रष्टाचार को ठीक कर सकता है)
- नई, अधिक उपयुक्त अनुक्रमणिका बनाएं
- डेटाबेस में संभावित भ्रष्टाचार है या नहीं यह देखने के लिए DBCC चलाएँ
- ताले / गतिरोध
- सुनिश्चित करें कि डेटाबेस में कोई अन्य प्रक्रिया नहीं चल रही है
- खासकर डीबीसीसी
- क्या आप पंक्ति या पृष्ठ स्तरीय लॉकिंग का उपयोग कर रहे हैं?
- क्वेरी शुरू करने से पहले टेबल को विशेष रूप से लॉक करें
- जांचें कि सभी प्रक्रियाएं एक ही क्रम में तालिकाओं तक पहुंच रही हैं
- सुनिश्चित करें कि डेटाबेस में कोई अन्य प्रक्रिया नहीं चल रही है
- क्या सूचकांकों का उचित उपयोग किया जा रहा है?
- जॉइन केवल इंडेक्स का उपयोग करेगा यदि दोनों एक्सप्रेशन बिल्कुल समान डेटा प्रकार हैं
- सूचकांक का उपयोग केवल तभी किया जाएगा जब अनुक्रमणिका पर पहले फ़ील्ड का मिलान क्वेरी में किया जाएगा
- क्या जहां उपयुक्त हो वहां क्लस्टर्ड इंडेक्स का उपयोग किया जाता है?
- श्रेणी डेटा
- Value1 और value2 के बीच का फ़ील्ड
- छोटे जॉइन अच्छे जॉइन होते हैं
- डिफ़ॉल्ट रूप से ऑप्टिमाइज़र एक बार में केवल तालिका 4 पर विचार करेगा।
- इसका मतलब है कि 4 से अधिक तालिकाओं के साथ जुड़ने में, उसके पास एक गैर-इष्टतम क्वेरी योजना चुनने का एक अच्छा मौका है
- शामिल हों को तोड़ें
- क्या आप जुड़ाव को तोड़ सकते हैं?
- अस्थायी तालिका में विदेशी कुंजियों का पूर्व-चयन करें
- आधा जुड़ाव करें और परिणाम एक अस्थायी तालिका में डालें
- क्या आप सही प्रकार की अस्थायी तालिका का उपयोग कर रहे हैं?
#temp
टेबल@table
. की तुलना में बहुत बेहतर प्रदर्शन कर सकते हैं बड़ी मात्रा (हजारों पंक्तियों) के साथ चर।
- सारांश तालिकाएं बनाए रखें
- अंतर्निहित तालिकाओं पर ट्रिगर के साथ निर्माण करें
- दैनिक/प्रति घंटा/आदि बनाएं
- तदर्थ बनाएं
- वृद्धिशील रूप से निर्माण करें या टियरडाउन / पुनर्निर्माण करें
- देखें कि SET SHOWPLAN ON के साथ क्वेरी प्लान क्या है
- देखें कि SET STATS IO ON के साथ वास्तव में क्या हो रहा है
- प्राग्मा का उपयोग करके अनुक्रमणिका को बाध्य करें:(सूचकांक:myindex)
- सेट फोर्सप्लान ऑन का उपयोग करके टेबल ऑर्डर को बाध्य करें
- पैरामीटर सूँघना:
- संग्रहीत प्रक्रिया को 2 में तोड़ें
- proc1 से proc2 को कॉल करें
- यदि @parameter को proc1 द्वारा बदल दिया गया है, तो ऑप्टिमाइज़र को proc2 में अनुक्रमणिका चुनने की अनुमति देता है
- क्या आप अपने हार्डवेयर में सुधार कर सकते हैं?
- आप कितने बजे चल रहे हैं? क्या कोई शांत समय है?
- क्या प्रतिकृति सर्वर (या अन्य नॉन-स्टॉप प्रक्रिया) चल रहा है? क्या आप इसे निलंबित कर सकते हैं? इसे चलाएं उदा। प्रति घंटा?