मैंने अपने लेख ट्यूनिंग एक्सेस क्वेरी परफॉर्मेंस में JetShowPlan के बारे में संक्षेप में लिखा था। जैसा कि मैंने उस लेख में लिखा था, SQL एक घोषणात्मक भाषा है। जब आप कोई प्रश्न लिखते हैं, तो आप डेटाबेस इंजन को बता रहे होते हैं क्या तुम्हें चाहिए। डेटाबेस इंजन कैसे तय करता है आपके लिए इसे पूरा करने के लिए सबसे अच्छा। यह आम तौर पर अच्छा होता है, क्योंकि सेट-आधारित संचालन को अनुकूलित करना कठिन होता है और डेटाबेस इंजन को आपके लिए यह करने देना आपको उन लोगों के ज्ञान का लाभ उठाने की अनुमति देता है जो उस विशिष्ट समस्या के लिए अपना जीवन समर्पित करते हैं।
नकारात्मक पक्ष यह है कि कैसे ब्लैक बॉक्स बन जाता है। आप कुछ SQL को ब्लैक बॉक्स में फीड करते हैं और डेटा के एक समूह के साथ एक परिणाम सेट आता है। डेटाबेस इंजन आपको ठीक वही डेटा प्रदान करने में अत्यंत विश्वसनीय है जिसका आपने अनुरोध किया था। मुद्दा यह है कि डेटा पुनर्प्राप्ति का प्रदर्शन हर जगह हो सकता है। स्पष्ट होने के लिए, खराब प्रदर्शन लगभग कभी भी डेटाबेस इंजन की गलती नहीं है। आम तौर पर, समस्या यह है कि हम एक वीबीए फ़ंक्शन के परिणाम पर एक इंडेक्स या फ़िल्टरिंग खो रहे हैं या दो लिंक्ड टेबल पर शामिल हो रहे हैं जो भौतिक रूप से अलग-अलग स्थानों में संग्रहीत हैं।
जब यह समस्या उत्पन्न होती है, तो हमें इसका निवारण करने का एक तरीका चाहिए। जेटशोप्लान दर्ज करें। इसे एक विशेष स्क्रूड्राइवर के रूप में सोचें जो हमें ब्लैक बॉक्स को अलग करने और कैसे देखने के लिए अंदर की ओर देखने की अनुमति देता है डेटाबेस इंजन SQL कमांड को लागू कर रहा है जिसे हम इसे खिलाते हैं। इस ज्ञान के साथ, हम SQL में बदलाव कर सकते हैं, एक इंडेक्स जोड़ सकते हैं, या अन्यथा हमारे प्रदर्शन की अड़चन के स्रोत को संबोधित कर सकते हैं।
आइए शुरू करें।
रजिस्ट्री कुंजी
जब भी ACE/Jet डेटाबेस इंजन कोई भी निष्पादित करता है, JetShowPlan एक टेक्स्ट फ़ाइल में क्वेरी प्लान (अर्थात, ब्लैक बॉक्स की सामग्री) लिखकर काम करता है। सवाल। यह टेक्स्ट फाइल तेजी से भरती है। टेक्स्ट फ़ाइल बनाने के लिए ऐसे संसाधनों की आवश्यकता होती है जो क्वेरी के प्रदर्शन को और कम करते हैं। इस प्रकार, हम इस सुविधा को केवल तभी सक्षम करना चाहते हैं जब हम सक्रिय रूप से किसी समस्या का निवारण कर रहे हों।
चूंकि यह उन्नत उपयोगकर्ताओं के लिए एक उपकरण है, इस मोड को सक्षम करने के लिए एक्सेस यूजर इंटरफेस में कोई सेटिंग नहीं है। इसे चालू या बंद करने का एकमात्र तरीका रजिस्ट्री में मान सेट करना है। रजिस्ट्री मान निम्न पैटर्न में फिट बैठता है (घुंघराले ब्रेसिज़ के अंदर का टेक्स्ट प्लेसहोल्डर के रूप में कार्य करता है):
[HKEY_LOCAL_MACHINE\SOFTWARE{\Wow6432Node}\Microsoft\Office\{xx}.0\Access Connectivity Engine\Engines\Debug]
"JETSHOWPLAN"="ON"
वर्शन और बिटनेस विचार
ऊपर दिखाया गया रजिस्ट्री मान पैटर्न कुछ प्लेसहोल्डर टेक्स्ट का उपयोग एक्सेस वातावरण के बीच अंतर के लिए करता है। संस्करण संख्या टेक्स्ट \{xx}.0\
आपकी मशीन पर स्थापित एक्सेस के संस्करण से संबंधित संस्करण संख्या से प्रतिस्थापित किया जाना चाहिए:
12.0
:एक्सेस 200713.0
:ट्रिस्काइडकाफोब्स को ट्रिगर करने से बचने के लिए छोड़ दिया गया14.0
:एक्सेस 201015.0
:एक्सेस 201316.0
:एक्सेस 2016 और 2019
\Wow6432Node
('वाह' का अर्थ है "विंडोज़ 64-बिट पर विंडोज़ 32-बिट") केवल तभी आवश्यक है जब आप विंडोज़ के 64-बिट संस्करण पर माइक्रोसॉफ्ट एक्सेस का 32-बिट संस्करण चला रहे हों। यदि एक्सेस और विंडोज दोनों 32-बिट या दोनों 64-बिट हैं, तो वह "फ़ोल्डर" (या रजिस्ट्री शब्दजाल में "कुंजी") अनावश्यक है।
वीबीए फॉर्म में:
If Is32BitAccess Xor Is32BitWindows Then
IncludeWow6432Key = True
Else
IncludeWow6432Key = False
End If
उदाहरण के लिए, 64-बिट विंडोज़ पर चल रहे एक्सेस 2010 के 32-बिट इंस्टॉलेशन के लिए निम्न रजिस्ट्री प्रविष्टि की आवश्यकता होगी:
[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Office\14.0\Access Connectivity Engine\Engines\Debug]
"JETSHOWPLAN"="ON"
इसी तरह, 64-बिट विंडोज़ पर एक्सेस 2019 की 64-बिट स्थापना की आवश्यकता होगी:
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\16.0\Access Connectivity Engine\Engines\Debug]
"JETSHOWPLAN"="ON"
मुझे यह भी ध्यान रखना चाहिए कि पहली बार जब आप इस प्रविष्टि को बनाते हैं, तो आपको "डीबग" कुंजी (फ़ोल्डर) और जेटशॉपलान मान नाम और डेटा जोड़ने की आवश्यकता होगी।
ऐसा करने के लिए ये चरण हैं:
- चलाएं regedit एक व्यवस्थापक के रूप में
- उपरोक्त नोटों के बाद "\Engines" कुंजी पर नेविगेट करें
- "\इंजन" पर राइट-क्लिक करें और नया -> कुंजी चुनें
- कुंजी को "नई कुंजी #1" से "डीबग" में बदलें
फिर, आपको "चालू" डेटा के साथ "JETSHOWPLAN" स्ट्रिंग मान जोड़ना होगा "showplan.out . में संलग्न करने के लिए सक्षम करने के लिए फ़ाइल या "बंद " फ़ाइल में जोड़ना बंद करने के लिए।
- "\Debug" कुंजी पर राइट-क्लिक करें और नया -> स्ट्रिंग मान चुनें
- मान को "नए मान #1" से "JETSHOWPLAN" में बदलें
- "JETSHOWPLAN" मान नाम पर राइट-क्लिक करें और संशोधित करें चुनें...
- मान डेटा को चालू पर सेट करें फिर [ओके] बटन पर क्लिक करें
अगली बार जब आप एक्सेस का एक नया इंस्टेंस शुरू करते हैं, तो यह डेटा को Showplan.out फ़ाइल में जोड़ना शुरू कर देगा। जब आप उपरोक्त परिवर्तन करते हैं तो एक्सेस के पहले से चल रहे किसी भी उदाहरण प्रभावित नहीं होंगे। जब आप सेटिंग को बंद करते हैं, तब भी ऐसा ही होता है . जब तक आप एक नया msaccess.exe शुरू नहीं करते, तब तक परिवर्तन प्रभावी नहीं होते हैं उदाहरण। एक्सेस के मौजूदा उदाहरणों को बंद करना आवश्यक नहीं है; एक्सेस का एक खुला उदाहरण होना संभव है जो सक्रिय रूप से showplan.out पर लिख रहा है जबकि एक्सेस का एक अलग उदाहरण नहीं है।
Autohotkey स्क्रिप्ट
मैं झूठ नहीं बोलने वाला; regedit में कूदना हर बार जब मैं JetShowPlan को चालू या बंद करना चाहता हूं तो यह कष्टप्रद होता है। अगर मुझे ऐसा करना होता, तो मैं शायद ही परेशान होता। लेकिन मुझे ऐसा करने की ज़रूरत नहीं है! मैंने Autohotkey में एक हॉटकी बनाई है जो JetShowPlan को चालू और बंद टॉगल करती है।
^#q:: ; Ctl + Win + Q (feel free to use your own key combination)
;--== Toggle JETSHOWPLAN ==--
;----- BEGIN CONFIGURATION (make all changes here) -------------
ShowPlanRegView = 64 ; set to 32 for 32-bit Access
ShowPlanKey = SOFTWARE\Microsoft\Office\16.0\Access Connectivity Engine\Engines\Debug ; change 16.0 to match Access version
;----- END CONFIGURATION ---------------------------------------
SetRegView %ShowPlanRegView%
RegRead ShowPlanSetting, HKEY_LOCAL_MACHINE\%ShowPlanKey%, JETSHOWPLAN
If ( ShowPlanSetting = "OFF" ) {
RegWrite REG_SZ, HKEY_LOCAL_MACHINE\%ShowPlanKey%, JETSHOWPLAN, ON
If ErrorLevel
MsgBox Error enabling JetShowPlan. Check permissions on:`n`nHKLM\%ShowPlanKey%`n`nfor user '%A_UserName%'
Else
MsgBox JetShowPlan set to ON
} Else {
RegWrite REG_SZ, HKEY_LOCAL_MACHINE\%ShowPlanKey%, JETSHOWPLAN, OFF
If ErrorLevel
MsgBox Error disabling JetShowPlan. Check permissions on:`n`nHKLM\%ShowPlanKey%`n`nfor user '%A_UserName%'
Else
MsgBox JetShowPlan set to OFF
}
SetRegView Default
Return
अब जब मैं अपने प्रश्नों को ट्यून करना चाहता हूं, तो मैं [सीटीएल] + [विन] + [क्यू] दबाता हूं और मुझे एक संदेश बॉक्स दिखाई देता है जो कहता है "जेटशोप्लान चालू पर सेट है"। जब मेरा काम हो जाए, तो मैं एक्सेस को बंद कर देता हूं, [Ctl] + [Win] + [Q] दबाता हूं और मुझे "JetShowPlan सेट ऑफ पर" दिखाई देता है।
समायोजन अनुमतियां
मेरे पास दो अलग-अलग विंडोज उपयोगकर्ता खाते हैं:एक मानक अनुमतियों के साथ जो मैं रोजमर्रा के काम के लिए उपयोग करता हूं और दूसरा सॉफ्टवेयर स्थापित करने के लिए व्यवस्थापक अनुमतियों के साथ, आदि। यह एक सामान्य सुरक्षा सर्वोत्तम अभ्यास है।
समस्या यह है कि JetShowPlan रजिस्ट्री कुंजी HKLM हाइव में है। डिफ़ॉल्ट रूप से, केवल व्यवस्थापक ही उस हाइव के मानों में परिवर्तन कर सकते हैं। यह कष्टप्रद है क्योंकि जब मैं अपनी ऑटोहोटकी स्क्रिप्ट चलाने की कोशिश करता हूं तो मुझे निम्न त्रुटि संदेश मिलता है:
हालांकि चिंता की कोई बात नहीं है। जैसा कि ऊपर दिया गया संदेश बताता है, हम इसे ठीक कर सकते हैं। सबसे अच्छी बात यह है कि हम अपनी सुरक्षा मुद्रा को कम किए बिना इसे सुविधाजनक बना सकते हैं। यहाँ चाल है।
- खोलें regedit एक व्यवस्थापक के रूप में
- \Debug पर नेविगेट करें कुंजी
- \Debug पर राइट-क्लिक करें कुंजी और अनुमतियां चुनें...
- [जोड़ें...] बटन क्लिक करें
- उपरोक्त संदेश बॉक्स ('माइक') से उपयोगकर्ता नाम दर्ज करें, [नाम जांचें] क्लिक करें, फिर [ठीक] क्लिक करें
- उपयोगकर्ता के लिए [√] "पूर्ण नियंत्रण" की अनुमति दें
- परिवर्तनों को सहेजने के लिए [ठीक] क्लिक करें
अब जब मैं [Ctl] + [Win] + [Q] दबाता हूं तो यह JetShowPlan को चालू और बंद कर देता है, रजिस्ट्री को स्वचालित रूप से अपडेट करता है।
Finding Showplan.out
JetShowPlan सक्षम होने पर Jet/ACE डेटाबेस इंजन क्वेरी प्लान जानकारी को कहाँ जोड़ रहा है, इस बारे में एक्सेस आपको सचेत नहीं करेगा। मैंने showplan.out की एक नकली कॉपी की खोज स्वीकार करने से कहीं अधिक समय बिताया है . यह खंड आपको उस भाग्य को साझा करने से बचाएगा।
डिफ़ॉल्ट स्थान
देखने के लिए पहला स्थान वर्तमान उपयोगकर्ता के दस्तावेज़ फ़ोल्डर में है। उदाहरण के लिए, मेरा विंडोज उपयोगकर्ता नाम "माइक" है, इसलिए मैं फ़ाइल को खोजने के लिए पहली जगह की उम्मीद करूंगा:C:\Users\Mike\Documents\showplan.out
।
CurDir() का उपयोग करना
तकनीकी रूप से कहें तो, showplan.out फ़ाइल वर्तमान कार्यशील निर्देशिका में बनाई गई है। यह आमतौर पर वर्तमान उपयोगकर्ता का दस्तावेज़ फ़ोल्डर होता है, लेकिन हमेशा नहीं। फ़ाइल के स्थान का पता लगाने का आसान तरीका CurDir() . का उपयोग करना है समारोह।
आप showplan.out फ़ाइल खोलने के लिए VBA IDE तत्काल विंडो में कोड की निम्न पंक्ति को कॉपी, पेस्ट और निष्पादित कर सकते हैं (यह मानते हुए कि आपने रजिस्ट्री में JetShowPlan को सक्षम किया है):
Shell "notepad """ & CurDir & "\showplan.out""", vbNormalFocus
ChDir() के माध्यम से आउटपुट स्थान बदलना
अगर किसी कारण से आप showplan.out . के लिए एक अलग स्थान निर्दिष्ट करना चाहते हैं फ़ाइल, आप ChDir() फ़ंक्शन का उपयोग करके ऐसा कर सकते हैं। वह फ़ंक्शन वर्तमान कार्यशील निर्देशिका को बदलता है। और, जैसा कि मैंने पहले उल्लेख किया है, वर्तमान निर्देशिका वह है जहां showplan.out फ़ाइल रहती है। जैसे ही आप वर्तमान कार्यशील निर्देशिका को बदलते हैं, JetShowPlan नए फ़ोल्डर में लिखना शुरू कर देता है; एक्सेस को बंद करने और फिर से खोलने की कोई आवश्यकता नहीं है।
आप ऐसा क्यों करना चाहेंगे? मान लें कि आप समान डेटा प्राप्त करने के लिए तीन अलग-अलग तरीकों की तुलना करना चाहते हैं। आप यह देखने के लिए तीन अलग-अलग प्रश्न लिखते हैं कि आपके द्वारा किए गए परिवर्तन क्वेरी योजना को कैसे प्रभावित करते हैं। चूंकि showplan.out इतना वर्बोज़ है, प्रत्येक क्वेरी योजना को अपनी फ़ाइल में रखना अच्छा होगा। इससे क्वेरी योजनाओं की तुलना करना आसान हो जाएगा। यहां बताया गया है कि मैं यह कैसे कर सकता हूं। पहला कदम यह सुनिश्चित करना है कि इनमें से प्रत्येक फ़ोल्डर मौजूद है। फिर, कोड की निम्नलिखित पंक्तियों को निष्पादित करें:
ChDir "C:\Users\Mike\Documents\Showplan\A"
DoCmd.OpenQuery "CollectTax1"
ChDir "C:\Users\Mike\Documents\Showplan\B"
DoCmd.OpenQuery "CollectTax2"
ChDir "C:\Users\Mike\Documents\Showplan\C"
DoCmd.OpenQuery "CollectTax3"
ChDir "C:\Users\Mike\Documents"
आपके पास जो कुछ भी है उसका उपयोग करें (या यदि आप इसे डाउनलोड नहीं करते हैं तो इसे डाउनलोड करें) 'अभी तक नहीं है)
जबकि CurDir() आपको showplan.out में सबसे हाल के परिवर्तनों के लिए एक निश्चित स्थान देगा। फ़ाइल, यह आपको नहीं बता सकता कि पिछली कार्यशील निर्देशिकाएं क्या थीं। और, यदि आपने एक्सेस का इंस्टेंस बंद कर दिया है जिसने showplan.out . बनाया है फ़ाइल, इस बात की कोई गारंटी नहीं है कि आपके द्वारा खोले गए एक्सेस के अगले इंस्टेंस में वही वर्तमान निर्देशिका होगी।
मैं हाल ही में "सब कुछ" नामक एक आसान छोटी उपयोगिता में आया था। यह एक छोटा निष्पादन योग्य है जो आपकी संपूर्ण हार्ड ड्राइव को कुछ ही सेकंड में अनुक्रमित करता है। एक बार अनुक्रमण पूरा हो जाने पर, आप अपनी ड्राइव पर कहीं भी फ़ाइलों या फ़ोल्डरों को तुरंत खोज सकते हैं।
आप सब कुछ डाउनलोड कर सकते हैं यहां से या चॉकलेटी के माध्यम से:choco install everything
. खोलें सब कुछ , showplan.out
के लिए खोजें , और एक सेकंड से भी कम समय में आप अपने कंप्यूटर पर अंतिम संशोधित तिथि के साथ showplan.out का प्रत्येक उदाहरण देखेंगे। काश मेरे पास यह उपकरण सालों पहले होता।
Showplan.out को समझना
जब आप पहली बार showplan.out खोलते हैं फ़ाइल, चकित होने की उम्मीद है। बहुत सारा पाठ है और इसका अधिकांश भाग शोर है। मेरे द्वारा नॉर्थविंड नमूना डेटाबेस खोलने पर उत्पन्न फ़ाइल का एक अंश यहां दिया गया है:
टिल्ड से शुरू होने वाली क्वेरी (~
) कच्चे SQL का प्रतिनिधित्व करता है जो किसी प्रपत्र या रिपोर्ट के गुण पत्रक में सहेजा जाता है और स्थायी QueryDef ऑब्जेक्ट के रूप में सहेजा नहीं जाता है। रुचि के मुख्य बिंदु प्रत्येक प्रश्न के लिए क्रमांकित चरण हैं:01)
, 02)
, 03)
, वगैरह आप अच्छे संकेतों और बुरे संकेतों की तलाश में इन चरणों का पालन करना चाहते हैं जो सुझाव दे सकते हैं कि समस्याएं कहां हैं।
मेरी जानकारी के लिए, showplan.out . के स्वरूपण और सामग्री के लिए कोई आधिकारिक दस्तावेज़ीकरण नहीं है फ़ाइल। हालाँकि, यह ठीक है, क्योंकि हम सूक्ष्मताओं में नहीं फंसने वाले हैं। हमारा मुख्य लक्ष्य स्पष्ट रूप से स्पष्ट समस्याओं की पहचान करना और उनका समाधान करना है। यहां 80/20 का नियम लागू होता है। अधिकांश प्रदर्शन लाभ हमारे प्रश्नों में एक या दो साधारण बदलावों से आएंगे।
अच्छे संकेत
यह सब इंडेक्स के बारे में है। हम चाहते हैं कि क्वेरी प्लान इंडेक्स का उपयोग करे, विशेष रूप से मल्टी-स्टेप क्वेरी के शुरुआती चरणों में। दो अलग-अलग कीवर्ड इंगित करते हैं कि अनुक्रमणिका का उपयोग किया जा रहा है:index
और rushmore
. रशमोर 1980 के दशक की शुरुआत में फॉक्स सॉफ्टवेयर द्वारा मूल रूप से विकसित क्वेरी ऑप्टिमाइज़ेशन तकनीक का कोडनेम है। Microsoft ने 1992 में कंपनी को खरीदा और जेट डेटाबेस इंजन में प्रौद्योगिकी को शामिल किया।
अनुक्रमणिका को संसाधित करने के लिए रशमोर तकनीक का उपयोग करने वाली क्वेरीज़ उन लोगों की तुलना में तेज़ी से चलती हैं जो अधिक पारंपरिक तरीके से अनुक्रमणिका का उपयोग करते हैं। रशमोर तकनीक का उपयोग केवल एक्सेस टेबल (स्थानीय और लिंक दोनों) के साथ लिंक किए गए फॉक्सप्रो और डीबीएएसई टेबल के साथ किया जा सकता है। विशेष रूप से, रशमोर का उपयोग लिंक किए गए SQL सर्वर तालिकाओं के साथ नहीं किया जा सकता है। लिंक किए गए SQL सर्वर तालिकाओं के प्रदर्शन को बढ़ावा देने के लिए, आप अक्सर पास-थ्रू क्वेरी लिखना बेहतर समझते हैं, लेकिन यह इस लेख के दायरे से बाहर है।
खराब संकेत
showplan.out . में देखने के लिए कुछ बुरे संकेत हैं फ़ाइल। इन संकेतों की साधारण उपस्थिति का मतलब यह नहीं है कि कोई समस्या है। उस ने कहा, यदि आप खराब प्रदर्शन वाली किसी क्वेरी का निवारण कर रहे हैं, तो आप संभावित समस्याओं के लिए इन शब्दों को चेतावनी फ़्लैग के रूप में सोच सकते हैं:X-Prod
, scanning
, temp
, temp
।
X-उत्पाद कीवर्ड तब प्रकट होता है जब आपके पास कार्टेशियन जॉइन (जिसे क्रॉस जॉइन या क्रॉस उत्पाद के रूप में भी जाना जाता है) के साथ कोई क्वेरी होती है। यह आमतौर पर गलती से होता है जब आप क्वेरी-दर-उदाहरण (क्यूबीई) संपादक में दो तालिकाओं में शामिल होना भूल जाते हैं। नतीजा यह है कि तालिका 1 में प्रत्येक रिकॉर्ड तालिका 2 में प्रत्येक रिकॉर्ड से मेल खाता है। रिकॉर्ड की कुल संख्या दो तालिका गणनाओं का उत्पाद है। इसलिए, यदि तालिका 1 में 7 रिकॉर्ड हैं और तालिका 2 में 9 रिकॉर्ड हैं, तो दो तालिकाओं का क्रॉस जॉइन 63 रिकॉर्ड लौटाता है। आप समस्या की कल्पना कर सकते हैं यदि दोनों तालिकाओं में हजारों या अधिक रिकॉर्ड हैं।
01) Inner Join table 'Table1' to table 'Table2'
using X-Prod join
देखने के लिए अगला कीवर्ड है स्कैन करना . यदि डेटाबेस इंजन परिणामों को फ़िल्टर करने के लिए किसी अनुक्रमणिका का उपयोग नहीं कर सकता है, तो यह स्कैनिंग पर वापस आ जाता है। इसका मतलब यह है कि यह देखने के लिए प्रत्येक पंक्ति को व्यक्तिगत रूप से जांचना होगा कि यह क्वेरी मानदंड को पूरा करता है या नहीं। जब आप इस शब्द को showplan.out . में देखते हैं फ़ाइल, इसका अक्सर मतलब होता है कि आपको स्कैन किए जा रहे कॉलम में एक इंडेक्स जोड़ना होगा। लेकिन हमेशा नहीं! कम कार्डिनैलिटी . वाले कॉलम के लिए (केवल कुछ अद्वितीय मान, जैसे स्थिति कॉलम), आमतौर पर एक इंडेक्स जोड़ने के लिए थोड़ा उल्टा होता है। एक बार जोड़ने के बाद, सूचकांक को बनाए रखा जाना चाहिए। यह आवेषण को धीमा कर देता है और डिस्क स्थान लेता है। साथ ही, यदि उत्पादन डेटा पर क्वेरी प्रदर्शन स्वीकार्य है, तो स्कैन किए गए कॉलम में एक इंडेक्स जोड़ना एक समयपूर्व अनुकूलन है (जिससे आपको बचना चाहिए)।
अंत में, अस्थायी . हैं और अस्थायी खोजशब्द। ये इंगित करते हैं कि डेटाबेस इंजन को अस्थायी आधार पर किसी प्रकार का संचालन करना पड़ा है। जब हम एक querydef बनाते और सहेजते हैं, तो उस वस्तु को बार-बार निष्पादन को अनुकूलित करने के लिए कुछ मेटाडेटा के साथ सहेजा जाता है। जाहिर है, अस्थायी इंडेक्स या जॉइन के दायरे से बाहर होने पर ऐसा मेटाडेटा खो जाता है। इन खोजशब्दों को आमतौर पर नज़रअंदाज़ किया जा सकता है, लेकिन अगर आप खराब प्रदर्शन करने वाली किसी अन्य स्पष्ट खामी के बिना किसी प्रश्न पर स्टम्प्ड हो जाते हैं, तो वे आपको सही दिशा में इंगित करने में सक्षम हो सकते हैं।
अति-सरलीकृत शब्दों में पुनर्कथन करने के लिए:
अच्छा > > > > > खराब:
रशमोर> अनुक्रमणिका> अस्थायी/अस्थायी> स्कैनिंग> X-उत्पाद
नोटपैड++ कस्टम भाषा
यदि आप मेरे अन्य काम को पढ़ रहे हैं, तो आप जानते हैं कि प्रोग्रामिंग (और सामान्य रूप से जीवन) में सिग्नल से शोर अनुपात को बढ़ाने के बारे में मेरी मजबूत भावनाएं हैं। इसके लिए, मैंने showplan.out में सिंटैक्स हाइलाइटिंग जोड़ने के लिए Notepad++ में "उपयोगकर्ता-परिभाषित भाषा" फ़ाइल बनाई है। फ़ाइलें। अब, जब मैं showplan.out open खोलता हूँ फ़ाइलें, वे नीचे स्क्रीनशॉट की तरह दिखती हैं। "GOOD" कीवर्ड नीले टेक्स्ट में रंगीन होते हैं और "BAD" कीवर्ड लाल टेक्स्ट में रंगीन होते हैं। यह गलत कोड को गलत दिखाने का एक उदाहरण है।
इसे सेट करने के लिए, इन चरणों का पालन करें:
- नोटपैड++ खोलें
- भाषा -> उपयोगकर्ता परिभाषित भाषा -> अपनी भाषा परिभाषित करें...
- क्लिक करें [नया बनाएं...]
- नाम दर्ज करें:showplan.out
- [ठीक] क्लिक करें
- _| पर जाएं फ़ोल्डर और डिफ़ॉल्ट|_ टैब
- "कोड 2 स्टाइल में फोल्डिंग" के तहत
Inputs
दर्ज करें ओपन औरEnd inputs
. के लिए बंद करने के लिए - _|कीवर्ड सूची|_ टैब पर जाएं
- पहले समूह के अंतर्गत [स्टाइलर] क्लिक करें और अग्रभूमि का रंग लाल पर सेट करें
- पहले समूह में निम्नलिखित "BAD" कीवर्ड दर्ज करें:
temp temporary scanning X-Prod
- दूसरे समूह के अंतर्गत [स्टाइलर] पर क्लिक करें और अग्रभूमि का रंग नीला पर सेट करें
- दूसरे समूह में निम्नलिखित "अच्छे" कीवर्ड दर्ज करें:
rushmore index
- विस्तार दर्ज करें:बाहर
अंतिम विचार
SQL सर्वर के विपरीत, Jet/ACE डेटाबेस इंजन आपको क्वेरी निष्पादन योजनाओं को सीधे संशोधित करने की अनुमति नहीं देता है। इसका मतलब है कि हम JetShowPlan के साथ ब्लैक बॉक्स के अंदर देख सकते हैं, लेकिन हम जो चाहते हैं उसे करने के लिए हम इसे रीवायर नहीं कर सकते। इसके बजाय, हमें उस पर ध्यान केंद्रित करना होगा जिसे हम नियंत्रित कर सकते हैं:सटीक SQL हम इसे खिलाते हैं और इसमें शामिल तालिकाओं के बीच अनुक्रमणिका और संबंध।
JetShowPlan का उपयोग करने से लघु और दीर्घकालिक दोनों तरह के लाभ होते हैं। अल्पावधि में, यह सुविधा आपको अपने एक्सेस एप्लिकेशन में आने वाली बाधाओं को ठीक करने देती है। लंबी अवधि में, आप एक्सेस के आंतरिक कामकाज में अंतर्दृष्टि प्राप्त करते हैं जो आपको पहली जगह में बाधाओं से बचने में मदद करता है।