एक रिलेशनल डेटाबेस के प्रदर्शन के लिए विशेष रूप से जटिल SQL कथनों के निष्पादन के लिए क्वेरी ऑप्टिमाइज़ेशन का बहुत महत्व है। एक क्वेरी ऑप्टिमाइज़र प्रत्येक क्वेरी को लागू करने के लिए सर्वोत्तम तरीके तय करता है।
उदाहरण के लिए, क्वेरी ऑप्टिमाइज़र चुनता है कि किसी दिए गए क्वेरी के लिए इंडेक्स का उपयोग करना है या नहीं, और कई तालिकाओं में शामिल होने पर उपयोग करने के लिए कौन से तरीके शामिल हैं। इन निर्णयों का SQL प्रदर्शन पर जबरदस्त प्रभाव पड़ता है, और क्वेरी ऑप्टिमाइज़ेशन ऑपरेशनल सिस्टम से लेकर डेटा वेयरहाउस और एनालिटिकल सिस्टम से लेकर कंटेंट मैनेजमेंट सिस्टम तक हर एप्लिकेशन के लिए एक महत्वपूर्ण तकनीक है।
क्वेरी ऑप्टिमाइज़ेशन के विभिन्न सिद्धांत इस प्रकार हैं -
-
समझें कि आपका डेटाबेस आपकी क्वेरी को कैसे क्रियान्वित कर रहा है - क्वेरी ऑप्टिमाइज़ेशन का पहला चरण यह समझना है कि डेटाबेस क्या प्रदर्शन कर रहा है। इसके लिए अलग-अलग डेटाबेस में अलग-अलग कमांड होते हैं। उदाहरण के लिए, MySQL में, क्वेरी प्लान देखने के लिए "EXPLAIN [SQL Query]" कीवर्ड का उपयोग किया जा सकता है। Oracle में, क्वेरी प्लान देखने के लिए कोई "EXPLAIN PLAN FOR [SQL Query]" का उपयोग कर सकता है।
-
जितना संभव हो उतना कम डेटा प्राप्त करें - क्वेरी से जितनी अधिक जानकारी पुनर्स्थापित की जाती है, डेटाबेस को इन रिकॉर्ड्स को संसाधित करने और सहेजने के लिए विस्तारित करने के लिए उतने ही अधिक संसाधनों की आवश्यकता होती है। उदाहरण के लिए, यदि उसे किसी तालिका से केवल एक कॉलम लाने की आवश्यकता हो, तो 'SELECT *' का उपयोग न करें।
-
मध्यवर्ती परिणाम संगृहीत करें - कभी-कभी किसी प्रश्न के लिए तर्क काफी जटिल हो सकता है। उपश्रेणियों, इनलाइन विचारों और यूनियन-प्रकार के बयानों के उपयोग के माध्यम से वांछित परिणाम उत्पन्न करना संभव है। उन तरीकों के लिए, संक्रमणकालीन परिणाम डेटाबेस में सहेजे नहीं जाते हैं, लेकिन सीधे क्वेरी के भीतर उपयोग किए जाते हैं। यह उपलब्धि के मुद्दों को जन्म दे सकता है, खासकर जब संक्रमणकालीन परिणामों में बड़ी संख्या में पंक्तियां होती हैं।
विभिन्न क्वेरी ऑप्टिमाइज़ेशन रणनीतियाँ इस प्रकार हैं -
-
अनुक्रमणिका का उपयोग करें - यह एक इंडेक्स का उपयोग कर सकता है यह पहली रणनीति है जिसका उपयोग किसी क्वेरी को तेज करने के लिए करना चाहिए।
-
समग्र तालिका - इसका उपयोग उच्च स्तरों पर तालिकाओं को पूर्व-आबाद करने के लिए किया जा सकता है, इसलिए कम मात्रा में जानकारी को पार्स करने की आवश्यकता होती है।
-
ऊर्ध्वाधर विभाजन - इसका उपयोग टेबल को कॉलम से विभाजित करने के लिए किया जा सकता है। यह विधि SQL क्वेरी को संसाधित करने के लिए आवश्यक जानकारी की मात्रा को कम करती है।
-
क्षैतिज विभाजन - इसका उपयोग तालिका को डेटा मान द्वारा विभाजित करने के लिए किया जा सकता है, अक्सर समय। यह विधि SQL क्वेरी को संसाधित करने के लिए आवश्यक जानकारी की मात्रा को कम करती है।
-
डी-सामान्यीकरण - डी-नॉर्मलाइजेशन की प्रक्रिया कई टेबलों को एक ही टेबल में जोड़ती है। यह क्वेरी कार्यान्वयन को गति देता है क्योंकि कम टेबल जॉइन की आवश्यकता होती है।
-
सर्वर ट्यूनिंग - प्रत्येक सर्वर के अपने पैरामीटर होते हैं और ट्यूनिंग सर्वर पैरामीटर प्रदान करते हैं ताकि यह पूरी तरह से हार्डवेयर संसाधनों का लाभ उठा सके जो क्वेरी कार्यान्वयन को काफी तेज कर सकते हैं।