के साथ सबस्ट्रिंग बनाम एसक्यूएल तुलना का उपयोग करके एसक्यूएल तुलना का प्रदर्शन मैं 2 टेबलों के बीच एक जॉइन स्थिति पर काम कर रहा हूं जहां कॉलम में से एक मिलान मूल्यों का एक संयोजन है। मुझे टेबल ए से कॉलम बी के कॉलम बी के पहले 2 अक्षरों में कॉलम ए में शामिल होने की आवश्यकता है।वाइल्डकार्ड
मैंने इसे संभालने के लिए 2 अलग-अलग बयान विकसित किए हैं और मैंने प्रत्येक विधि के प्रदर्शन का विश्लेषण करने का प्रयास किया है।
विधि 1:
ON tB.columnB like tA.columnA || '%'
विधि 2:
ON substr(tB.columnB,1,2) = tA.columnA
क्वेरी कार्य योजना लागू करके एक बहुत कम चरणों विधि 1 का उपयोग कर विधि 2 की तुलना में है, तथापि, यह विधि 2 की तरह दिखता है बहुत कार्यान्वित और तेज। साथ ही, निष्पादन योजना विधि 2 के लिए एक अनुशंसित अनुक्रमणिका दिखाती है जो इसके प्रदर्शन को बेहतर बना सकती है।
मैं एक आईबीएम iSeries पर इस चला रहा हूँ, हालांकि एसक्यूएल क्वेरी अनुकूलन के बारे में अधिक जानने के लिए एक सामान्य अर्थ में जवाब में रुचि होगी।
क्या यह समझ में आता है कि विधि 2 तेजी से निष्पादित होगा?
यह SO सवाल समान है, लेकिन ऐसा लगता है कि इन दृष्टिकोणों के प्रदर्शन अंतर के लिए कोई ठोस जवाब प्रदान नहीं किया गया है: T-SQL speed comparison between LEFT() vs. LIKE operator।
पुनश्च: तालिका डिजाइन कि शामिल होने के इस प्रकार की आवश्यकता है कुछ है कि मैं इस समय नहीं बदला प्राप्त कर सकते हैं नहीं है। मुझे लगता है कि अलग-अलग प्रकार के डेटा रखने वाले फ़ील्ड को अलग करना होगा।
INNER या बाहरी जॉइन? –
यह एक आंतरिक शामिल होने के लिए है। प्रकार में अंतर आएगा? – Swoop
ठीक है, यह अनुमान लगाने के लिए शायद एक खोने वाला गेम है कि क्वेरी ऑप्टिमाइज़र में क्या हो रहा है। लेकिन हां, इस मामले में यदि यह एक इंटर्न जॉइन विधि 1 है तो सभी टीए को पढ़ने की आवश्यकता होती है जबकि विधि 2 को केवल टीबी पढ़ने की आवश्यकता होती है। पंक्तियों की संख्या के आधार पर, यह महत्वपूर्ण हो सकता है और निष्पादन योजना को प्रभावित कर सकता है। –