पहले Run
query
Sql Server Management Studio
. से और बॉटल नेक कहां है, यह देखने के लिए क्वेरी प्लान को देखें। किसी भी स्थान पर आपको "टेबल स्कैन" या "इंडेक्स स्कैन" दिखाई देता है, उसे यह पता लगाने के लिए सभी डेटा से गुजरना पड़ता है कि वह क्या ढूंढ रहा है। यदि आप उपयुक्त अनुक्रमणिका बनाते हैं जिनका उपयोग इन कार्यों के लिए किया जा सकता है तो इसे प्रदर्शन में वृद्धि करनी चाहिए।
एसक्यूएल क्वेरी के प्रदर्शन को बेहतर बनाने के लिए नीचे सूचीबद्ध कुछ युक्तियां दी गई हैं..
एकल क्वेरी में एकाधिक जॉइन से बचें
कई जॉइन का उपयोग करके SQL क्वेरी लिखने से बचने की कोशिश करें जिसमें बाहरी जॉइन, क्रॉस अप्लाई, आउटर अप्लाई और अन्य जटिल सब क्वेश्चन शामिल हैं। यह ऑप्टिमाइज़र के लिए जॉइन ऑर्डर और जॉइन टाइप तय करने के विकल्पों को कम करता है। कभी-कभी, ऑप्टिमाइज़र को नेस्टेड लूप जॉइन का उपयोग करने के लिए मजबूर किया जाता है, भले ही अत्यधिक जटिल क्रॉस लागू या उप क्वेरी वाले प्रश्नों के प्रदर्शन के परिणाम कुछ भी हों।
कर्सर को क्वेरी से हटा दें क्वेरी से कर्सर हटाने का प्रयास करें और सेट-आधारित क्वेरी का उपयोग करें; सेट-आधारित क्वेरी कर्सर-आधारित की तुलना में अधिक कुशल है। यदि डायनेमिक कर्सर से बचने के बजाय कर्सर का उपयोग करने की आवश्यकता है क्योंकि यह क्वेरी ऑप्टिमाइज़र के लिए उपलब्ध योजनाओं की पसंद को सीमित करता है। उदाहरण के लिए, डायनेमिक कर्सर ऑप्टिमाइज़र को नेस्टेड लूप जॉइन का उपयोग करने तक सीमित करता है।
गैर-सहसंबद्ध स्केलर उप क्वेरी के उपयोग से बचें आप मुख्य क्वेरी के हिस्से के बजाय गैर-सहसंबद्ध स्केलर उप क्वेरी को एक अलग क्वेरी के रूप में हटाने के लिए अपनी क्वेरी को फिर से लिख सकते हैं और आउटपुट को एक चर में संग्रहीत कर सकते हैं, जिसे मुख्य क्वेरी या बैच के बाद के भाग में संदर्भित किया जा सकता है। यह ऑप्टिमाइज़र को बेहतर विकल्प देगा, जो एक बेहतर योजना के साथ सटीक कार्डिनैलिटी अनुमान वापस करने में मदद कर सकता है।
मल्टी-स्टेटमेंट टेबल वैल्यूड फंक्शन्स (TVFs) से बचें मल्टी-स्टेटमेंट टीवीएफ इनलाइन टीएफवी की तुलना में अधिक महंगे हैं। SQL सर्वर इनलाइन TFV को मुख्य क्वेरी में विस्तारित करता है जैसे कि यह विचारों का विस्तार करता है लेकिन मुख्य क्वेरी से अलग संदर्भ में मल्टी-स्टेटमेंट TVF का मूल्यांकन करता है और मल्टी-स्टेटमेंट के परिणामों को अस्थायी कार्य तालिकाओं में परिवर्तित करता है। अलग संदर्भ और कार्य तालिका मल्टी-स्टेटमेंट टीवीएफ को महंगा बनाती है।
अत्यधिक चयनात्मक अनुक्रमणिका बनाएं चयनात्मकता तालिका में योग्यता पंक्तियों के प्रतिशत को परिभाषित करती है (पंक्तियों की योग्यता संख्या/पंक्तियों की कुल संख्या)। यदि पंक्तियों की योग्यता संख्या का पंक्तियों की कुल संख्या का अनुपात कम है, तो सूचकांक अत्यधिक चयनात्मक है और सबसे उपयोगी है। एक गैर-संकुल सूचकांक सबसे उपयोगी है यदि अनुपात लगभग 5% या उससे कम है, जिसका अर्थ है कि यदि सूचकांक 95% पंक्तियों को विचार से समाप्त कर सकता है। यदि अनुक्रमणिका किसी तालिका में 5% से अधिक पंक्तियों को लौटा रही है, तो संभवतः इसका उपयोग नहीं किया जाएगा; या तो कोई भिन्न अनुक्रमणिका चुनी जाएगी या बनाई जाएगी या तालिका स्कैन की जाएगी।
एक अनुक्रमणिका में एक कॉलम की स्थिति बनाएं किसी अनुक्रमणिका में स्तंभ का क्रम या स्थिति भी SQL क्वेरी प्रदर्शन को बेहतर बनाने में महत्वपूर्ण भूमिका निभाती है। एक अनुक्रमणिका SQL क्वेरी प्रदर्शन को बेहतर बनाने में मदद कर सकती है यदि क्वेरी का मानदंड उन स्तंभों से मेल खाता है जो अनुक्रमणिका कुंजी में सबसे अधिक बचे हैं। सर्वोत्तम अभ्यास के रूप में, गैर-संकुल अनुक्रमणिका की कुंजी में सबसे चुनिंदा स्तंभों को सबसे बाईं ओर रखा जाना चाहिए।
अप्रयुक्त अनुक्रमणिका छोड़ें अप्रयुक्त अनुक्रमणिका को छोड़ने से डेटा पुनर्प्राप्ति को प्रभावित किए बिना डेटा संशोधनों को गति देने में मदद मिल सकती है। इसके अलावा, आपको बैच प्रक्रियाओं के लिए एक रणनीति को परिभाषित करने की आवश्यकता है जो बार-बार चलती हैं और कुछ इंडेक्स का उपयोग करती हैं। ऐसे मामलों में, बैच प्रक्रियाओं से पहले अनुक्रमणिका बनाना और फिर बैच प्रक्रियाओं के पूरा होने पर उन्हें छोड़ना डेटाबेस पर ओवरहेड को कम करने में मदद करता है।
सांख्यिकीय निर्माण और अपडेट आपको क्वेरी में संदर्भित कंप्यूटेड कॉलम और मल्टी-कॉलम के लिए सांख्यिकीय निर्माण और नियमित अपडेट का ध्यान रखना होगा; क्वेरी ऑप्टिमाइज़र, क्वेरी परिणाम में कार्डिनैलिटी, या पंक्तियों की संख्या का अनुमान लगाने के लिए तालिका आंकड़ों के एक या अधिक कॉलम में मानों के वितरण के बारे में जानकारी का उपयोग करता है। ये कार्डिनैलिटी अनुमान क्वेरी ऑप्टिमाइज़र को एक उच्च-गुणवत्ता वाली क्वेरी योजना बनाने में सक्षम बनाते हैं।
अपनी स्कीमा परिभाषाओं पर दोबारा गौर करें अंतिम लेकिन कम से कम, अपनी स्कीमा परिभाषाओं पर दोबारा गौर करें; ध्यान रखें कि उपयुक्त विदेशी कुंजी, नल नहीं और सीईएचसीके बाधाएं मौजूद हैं या नहीं। सही जगह पर सही बाधा की उपलब्धता हमेशा क्वेरी प्रदर्शन को बेहतर बनाने में मदद करती है, जैसे FORIGEN KEY बाधा कुछ बाहरी या अर्ध-जुड़ने को आंतरिक जुड़ाव में परिवर्तित करके जुड़ने को आसान बनाने में मदद करती है और CHECK बाधा अनावश्यक या निरर्थक विधेय को हटाकर थोड़ी मदद करती है।