के लिए एक अलग/सही निष्पादन योजना कैसे चुन सकता हूं मुझे अपेक्षाकृत सरल क्वेरी और निष्पादन योजना के साथ समस्या है, इसके लिए एक्सेस का चयन करें।मैं एमएस-एक्सेस को अपनी क्वेरी
क्वेरी इस फार्म
SELECT somethings
FROM A INNER JOIN (B INNER JOIN (C INNER JOIN D ON ...) ON ...) ON ...
WHERE A.primaryKey= 1 AND D.d = 2;
सी की है और डी अपेक्षाकृत कुछ पंक्तियों की है। ए और बी में कुछ हजार पंक्तियां हैं।
क्वेरी, जो 2 पंक्तियां लौटाती है (सुनिश्चित नहीं है कि यह प्रासंगिक है) वास्तव में धीमी है। यह 17 सेकंड में चलता है। अगर मैं कहां से AND D.d = 2
भाग को हटा देता हूं, तो क्वेरी अब 4 पंक्तियां लौटाती है और तुरंत चलती है।
तो मेरी समझ यह है कि जेईटी इंजन तुरंत डीडी पर फिल्टर के बिना क्वेरी चला सकता है, फिर तत्काल फ़िल्टर निष्पादित करें (फ़िल्टर करने के लिए केवल 4 पंक्तियां)। इसके लिए D.d = 2
फ़िल्टर के साथ क्वेरी चलाने के लिए बहुत अधिक समय नहीं होना चाहिए।
मैंने फिल्टर के बिना एक उप क्वेरी बनाने की कोशिश की और इसे किसी अन्य क्वेरी में शामिल किया जो परिणाम को फ़िल्टर करेगा, लेकिन यह अभी भी धीमा है। मेरा अनुमान है कि जेट इंजन उप-प्रश्नों को "फ़्लैट" करने के लिए पर्याप्त स्मार्ट है, इसलिए परिणाम वही है।
चूंकि मैं कामना करने में असमर्थ था क्योंकि मैं चाहता था कि मैंने जेटशोप्लान चीज़ का उपयोग किया ताकि एक्सेस निष्पादन योजना को आउटपुट कर सके। यहां मुझे यह मिला है:
तेज क्वेरी के लिए (D.d = 2
के बिना एक) क्वेरी प्लान का पहला चरण ए तालिका पर A.primaryKey = 1
फ़िल्टर लागू करना है। इसके परिणामस्वरूप 30000 से अधिक पंक्तियों में से 1 पंक्ति का डेटा सेट होता है। फिर जोड़ों को डेटा सेट के साथ इंडेक्स का उपयोग करके ए से डी तक निष्पादित किया जाता है जो कभी 4 पंक्तियों से अधिक नहीं होता है।
धीमी क्वेरी को रिवर्स ऑर्डर में निष्पादित किया जाता है। डी और सी पहले शामिल हो गए हैं तो D.d = 2
का परीक्षण किया गया है। उसके बाद, सी से ए में शामिल होने को निष्पादित किया जाता है। ऐसा करने से इस डेटा को डी से सी में शामिल किया जाना चाहिए, सी से बी तक और बी से ए तक बहुत बड़ा है। जब सभी जॉइन निष्पादित होते हैं और A.primaryKey=1
से पहले निष्पादित किया जाता है तो डेटा सेट में 120K पंक्तियां होंगी।
क्या कोई तरीका है कि मैं एक्सेस पर सही क्वेरी योजना को मजबूर कर सकता हूं?
मुझे उम्मीद है कि मैं स्पष्ट था। अगर मुझे क्वेरी प्लान पोस्ट करना चाहिए तो मुझे बताएं। मैंने इसलिए नहीं किया क्योंकि वे काफी बड़े हैं।
अग्रिम धन्यवाद,
mp
जब से तुम क्वेरी योजनाकार के संकेत प्रदान नहीं कर सकते मैं संदेह है कि आप एसओएल हैं। यदि यह प्रदर्शन-महत्वपूर्ण है, तो आप क्वेरी के तेज़ भाग को स्क्रैच तालिका में जोड़ सकते हैं और इसे अन्य 'D.d = 2' क्वेरी के लिए उपयोग कर सकते हैं। मुझे पता है कि यह आवाज खराब है (यह है!), लेकिन मुझे नहीं पता कि आप अब एक ही क्वेरी के धीमेपन के साथ रहने के अलावा और क्या कर सकते हैं। – HansUp
@ हंसअप: आपके इनपुट के लिए धन्यवाद। मुझे डर था कि मुझे ऐसे बदसूरत हैक का उपयोग करना होगा, लेकिन अगर मुझे कोई अन्य समाधान नहीं मिल रहा है तो मुझे एक का उपयोग करना होगा। मेरे उपयोगकर्ता इस क्वेरी के परिणाम प्रति दिन दो बार इंतजार कर रहे हैं और 17 सेकंड लंबा समय है जब आप स्क्रीन पर घूरते हैं। –