मुझे अन्य डेटाबेस के बारे में निश्चित नहीं है, लेकिन SQL सर्वर के लिए मैं निष्पादन योजना की अनुशंसा करता हूं। यह बहुत स्पष्ट रूप से (हालांकि बहुत सी लंबवत और क्षैतिज स्क्रॉलिंग के बावजूद, जब तक कि आपके पास 400 "मॉनिटर नहीं है!) दिखाता है कि आपकी क्वेरी का कौन सा कदम समय को चूस रहा है।
यदि आपके पास एक कदम है जो पागल 80%, फिर शायद एक इंडेक्स जोड़ा जा सकता है, फिर इंडेक्स को ट्वीक करने के बाद, अपना अगला सबसे बड़ा कदम खोजने के लिए निष्पादन योजना को फिर से चलाएं।
कुछ बदलावों के बाद आप पाएंगे कि वास्तव में कोई भी कदम नहीं है दूसरों से बाहर यानी वे सभी 1-2% हैं। यदि ऐसा है, तो आपको यह देखने की आवश्यकता हो सकती है कि क्या आप अपनी क्वेरी में शामिल डेटा की मात्रा को कम कर सकते हैं, तो उन चार मिलियन बंद बिक्री आदेशों को "सक्रिय बिक्री आदेश" क्वेरी में शामिल करने की आवश्यकता है? नहीं, तो STATUS = 'C' के साथ उन सभी को बाहर निकालें ... या ऐसा कुछ ।
निष्पादन योजना से आप जो भी सुधार देखेंगे वह बुकमार्क लुकअप है, मूल रूप से इसे इंडेक्स में एक मैच मिल जाता है, लेकिन फिर SQL सर्वर को आपके इच्छित रिकॉर्ड को ढूंढने के लिए तालिका के माध्यम से जल्दी से ट्रैवल करना पड़ता है। इस ऑपरेशन में पहली बार टेबल को स्कैन करने से अधिक समय लग सकता है, यदि ऐसा है, तो क्या आपको वास्तव में उस इंडेक्स की आवश्यकता है?
इंडेक्स के साथ, और विशेष रूप से SQL सर्वर 2005 के साथ आपको INCLUDE क्लॉज को देखना चाहिए, यह मूल रूप से आपको इंडेक्स में बिना किसी इंडेक्स में कॉलम रखने की अनुमति देता है, इसलिए यदि आपकी क्वेरी के लिए आवश्यक सभी डेटा है आपके इंडेक्स में या एक कॉलम शामिल है तो SQL सर्वर को टेबल पर भी एक बड़ा प्रदर्शन पिकअप देखने की ज़रूरत नहीं है।
स्रोत
2008-09-14 04:07:29
बहुत [इस बड़े सवाल] (http://stackoverflow.com/questions/39331/what-generic-techniques-can-be-applied-to-optimize-sql-queries#39344 के समान दिखता है)। – Unsliced