ठीक है तो मुझे एहसास है कि यह एक बहुत अस्पष्ट सवाल है, लेकिन मेरे साथ भालू।एसक्यूएल उप-इष्टतम क्वेरी प्लान का चयन क्यों करता है?
मैंने कई अवसरों पर विभिन्न और असंबद्ध प्रश्नों के साथ इस समस्या का अनुभव किया है। नीचे दिए गए क्वेरी कई मिनट लगते हैं निष्पादित करने के लिए:
SELECT <Fields>
FROM <Multiple Tables Joined>
LEFT JOIN (SELECT <Fields> FROM <Multiple Tables Joined>) ON <Condition>
हालांकि, सिर्फ संकेत शामिल हो यह सिर्फ सेकंड में कार्यान्वित क्वेरी जोड़कर:
SELECT <Fields>
FROM <Multiple Tables Joined>
LEFT HASH JOIN (SELECT <Fields> FROM <Multiple Tables Joined>) ON <Condition>
अजीब बात में शामिल होने में निर्दिष्ट की गई है संकेत वास्तव में प्रदर्शन में सुधार नहीं करता है। ऐसा प्रतीत होता है क्योंकि संकेत ऑप्टिमाइज़र को अलगाव में उप क्वेरी निष्पादित करने का कारण बनता है और फिर शामिल होता है। यदि मैं उप-क्वेरी के लिए तालिका-मूल्यवान फ़ंक्शन (इनलाइन एक नहीं) बनाता हूं तो मुझे वही प्रदर्शन सुधार दिखाई देता है। जैसे
SELECT <Fields>
FROM <Multiple Tables Joined>
LEFT JOIN dbo.MySubQueryFunction() ON <Condition>
किसी के पास कोई विचार है कि इस मामले में अनुकूलक इतना मूर्ख क्यों है?
SQL सर्वर का कौन सा संस्करण आप उपयोग कर रहे हैं? – Austin
मैंने 2005 और 2008 दोनों में समस्या का अनुभव किया है –