मैंने हमेशा तार्किक SQL प्रसंस्करण पर इट्ज़िक बेन-गण के उत्कृष्ट चार्ट को क्वेरी प्रदर्शन के बारे में तर्क करने में अत्यधिक सहायक पाया है। भले ही चार्ट SQL सर्वर के लिए बनाया गया था, फिर भी यह किसी भी डेटाबेस इंजन पर लागू होता है जो SQL मानक का पालन करता है, जिसमें एक्सेस डेटाबेस इंजन भी शामिल है। हालांकि हम SQL सर्वर डेटाबेस का उपयोग करना पसंद करते हैं, हमारे पास कभी-कभी एक्सेस डेटाबेस या एक्सेस एप्लिकेशन होते हैं जिन्हें एक्सेस क्वेरी (जैसे रिपोर्टिंग के लिए अस्थायी टेबल) के उपयोग की आवश्यकता होती है। एक्सेस फैंसी-पैंट प्रोफाइलिंग टूल के साथ नहीं आता है तो हम क्या करें?
जेरी-हमारी अपनी ट्रेस उपयोगिता में हेराफेरी
इससे मुझे आश्चर्य हुआ - क्या कोई यह निर्धारित कर सकता है कि SQL क्वेरी का एक खंड कब निष्पादित होता है और कितनी बार? एक्सेस में निष्पादन योजनाओं को दिखाने का एक साधन होता है, लेकिन यह विवरण में नहीं आता है कि विवरण कैसे और कब संसाधित किया जाता है। भौतिक . का अनुमान लगाने का एक गोल चक्कर तरीका है एक्सेस डेटाबेस इंजन द्वारा उपयोग किया जाने वाला प्रोसेसिंग ऑर्डर:एक कस्टम VBA फ़ंक्शन!
पब्लिक फंक्शन ट्रेस (इवेंटनाम स्ट्रिंग के रूप में, वैरिएंट के रूप में वैकल्पिक मान) बूलियन के रूप में यदि मिसिंग (मान) है तो डीबग करें। प्रिंट इवेंटनाम, "#No Value#" और डिबग। प्रिंट इवेंटनाम, वैल्यू एंड अगर ट्रेस =ट्रूएंड फंक्शन पूर्व>इसे एक मानक मॉड्यूल में सहेजा जा सकता है। फिर हम एक साधारण टेबल सेट कर सकते हैं:
एक्सेस क्वेरी के क्लॉज को ट्रेस करना
उस सेट अप के साथ, हम एक एक्सेस क्वेरी बना सकते हैं और
Trace
. छिड़क सकते हैं एक्सेस क्वेरी के विभिन्न भागों में। यहां एक उदाहरण दिया गया है:सेलेक्ट c1.ColorID, Trace("Select") AS Ignored1, Trace("SELECT",c1.Color) As Ignored2FROM tblColor as c1 WHERE Trace("WHERE") <> 0 और Trace("WHERE", c1 .Color) <> 0ऑर्डर बाय ट्रेस ("ऑर्डर बाय"), ट्रेस ("ऑर्डर बाय", c1.Color);यदि आप डेटाशीट दृश्य में क्वेरी खोलते हैं, तो VBIDE की तत्काल विंडो पर जाएं, आपको आउटपुट इस तरह देखना चाहिए:
जहां #कोई मूल्य नहीं#ऑर्डर द्वारा #कोई मूल्य नहीं#चुनें #कोई मूल्य नहीं#जहां रेड द्वारा रेडॉर्डर द्वारा ग्रीनऑर्डर द्वारा ग्रीनजहां ब्लूऑर्डर द्वारा ब्लूसेलेक्ट ब्लूसेलेक्ट ग्रीन सेलेक्ट रेडयह हमें इस बारे में कुछ अंतर्दृष्टि प्रदान करता है कि एक्सेस किस प्रकार क्वेरी का समाधान कर रहा है जो तब सहायक हो सकता है जब आपको खराब प्रदर्शन करने वाली क्वेरी को अनुकूलित करने की आवश्यकता हो। आइए देखें कि हम क्या सीख सकते हैं:
- हम देख सकते हैं कि यदि कोई कॉलम संदर्भ नहीं हैं, तो वीबीए फ़ंक्शन को जितनी जल्दी हो सके कॉल किया जाता है क्योंकि एक्सेस यह मानता है कि उनके पास पूरे परिणाम सेट के लिए केवल एक मान हो सकता है, इसलिए फ़ंक्शन को बार-बार कॉल करने का कोई मतलब नहीं है। एक ही जवाब पाने के लिए। आप देख सकते हैं कि
Trace
दूसरे वैकल्पिक तर्क के बिना इनवोकेशन का मूल्यांकन दूसरे वैकल्पिक तर्क में कॉलम संदर्भ वाले अन्य सभी इनवोकेशन से पहले किया गया। - पिछले बिंदु के परिणाम के रूप में, यदि आह्वान में एक स्तंभ संदर्भ है, तो इसका मूल्यांकन प्रत्येक पंक्ति के लिए कम से कम एक बार किया जाना चाहिए। आप देख सकते हैं कि क्लॉज का मूल्यांकन करते समय हम प्रत्येक रंग मान से गुजरते हैं।
- हम देखते हैं कि ऑर्डर आम तौर पर वैसा ही है जैसा हम इत्ज़िक बेन-गण के चार्ट में देखते हैं;
WHERE
जितनी जल्दी हो सके मूल्यांकन किया जाता है,ORDER BY
सभी गैर-योग्यता वाली पंक्तियों को समाप्त करने के बाद मूल्यांकन किया जाता है, फिर जो कुछ भी बचा है,SELECT
फिर मूल्यांकन किया जाता है। - हालांकि हम गैर-योग्यता वाली पंक्तियों को फ़िल्टर करने के बाद छँटाई लागू करने की अपेक्षा करेंगे, ऐसा लगता है कि एक्सेस जितनी जल्दी हो सके आउटपुट को आज़माना और छाँटना पसंद करता है, संभवतः क्योंकि सॉर्ट में एक नई पंक्ति सम्मिलित करना सस्ता है पूरे सेट को छाँटने पर सूची।
अतिरिक्त प्रयोग और निष्कर्ष
आप किसी भिन्न क्वेरी के साथ थोड़ा प्रयोग कर सकते हैं। उदाहरण के लिए, आप इस बात की जानकारी प्राप्त कर सकते हैं कि कब/अक्सर एक्सेस प्रोसेस GROUP BY
, इस तरह की एक क्वेरी का उपयोग करके:
सिलेक्ट c1.ColorID, Trace("Select") As Ignored1FROM tblColor as c1 इनर जॉइन tblColor as c2 ON c1.ColorID =c2.ColorIDWHERE Trace("WHERE") <> 0 AND Trace("WHERE", [c1 ].[Color]) <> 0GROUP BY c1.ColorID, Trace("GROUP BY", c1.Color)C1.ColorID द्वारा ऑर्डर;
डेटाबेस इंजन वास्तव में क्या कर रहा है, इसके बारे में अधिक जानने के लिए आप JetShowPlan के संयोजन के साथ इसका उपयोग कर सकते हैं। उम्मीद है, आप अपनी एक्सेस क्वेरी के प्रदर्शन को कैसे बेहतर बना सकते हैं, इस बारे में अंतर्दृष्टि प्राप्त करने में आपको यह मददगार लग सकता है। एक चुनौती के रूप में, आप कारण बता सकते हैं कि एक्सेस GROUP BY
. को क्यों निष्पादित करता है? जिस तरह से करता है। मैं आपको डेटाशीट खोलने और स्क्रॉल करने के लिए प्रयोग करने के लिए भी प्रोत्साहित करता हूं। तब आपको पता चलेगा कि SELECT
चारों ओर नेविगेट करने के परिणामस्वरूप पुनर्मूल्यांकन हो जाता है।
मुझे यह बताना चाहिए कि ऊपर दी गई तकनीक हमें भौतिक . में अंतर्दृष्टि प्रदान करती है चार्ट में वर्णित तार्किक प्रसंस्करण क्रम के बजाय प्रसंस्करण योजना। तदनुसार, हमें उम्मीद करनी चाहिए कि डेटा की अलग-अलग मात्रा या अलग-अलग क्वेरी के लिए योजना अलग होगी। हमें यह भी विचार करना होगा कि Trace
. जोड़ना कार्य योजना को प्रभावित कर सकता है। हालांकि, मैं तर्क दूंगा कि यदि आप उन विचारों के बारे में बहुत चिंतित हैं, तो शायद उस क्वेरी और उसके अंतर्निहित डेटा को SQL सर्वर डेटाबेस में स्थानांतरित करना बेहतर है जहां आपके पास क्वेरी के प्रदर्शन को अनुकूलित करने के लिए और अधिक विकल्प हैं।
मज़े करो!
Microsoft Access प्रश्नों के लिए सहायता चाहिए? एक्सेस विशेषज्ञों को (773) 809 5456 पर कॉल करें या टीम को आज ही एक ईमेल भेजें।