जब SQL सर्वर CTE को "ऑप्टिमाइज़ेशन फ़ेंस" के रूप में उपयोग करता है, तो कौन से नियम निर्धारित करते हैं?


10

कुछ समय पहले, ब्रेंट ओजेर ने SQL सर्वर और पोस्टग्रेक्यूएल के बीच कुछ अंतरों का विवरण देते हुए एक पोस्ट प्रकाशित की:

SQL सर्वर और PostgreSQL के बीच दो महत्वपूर्ण अंतर

पहला बिंदु ("CTEs ऑप्टिमाइज़ेशन फैंस हैं") ने मेरी आंख को पकड़ लिया, क्योंकि यह स्पष्ट है कि प्रदान किए गए उदाहरण में, SQL सर्वर CTE और मुख्य क्वेरी को एक साथ जोड़ता है और इसे एकल क्वेरी के रूप में अनुकूलित करता है (विपरीत व्यवहार के विपरीत) PostgreSQL)।

हालाँकि, यह व्यवहार उन उदाहरणों के विपरीत लगता है जो मैंने अन्य ब्लॉग्स और प्रशिक्षण वर्गों में देखे हैं, जहाँ SQL सर्वर CTE को ऑप्टिमाइज़ेशन फेंस के रूप में मानता है, जो इंडेक्स के बेहतर उपयोग, बेहतर प्रदर्शन आदि के लिए अनुमति देता है। उदाहरण के लिए:

स्टार का चयन करने का एक बेहतर तरीका

तो, ऐसा लगता है कि SQL सर्वर CTE को ऑप्टिमाइज़ेशन बाड़ SOMETIMES के रूप में "सम्मान" देता है। क्या ऐसे कोई अच्छे संसाधन उपलब्ध हैं जो ज्ञात मामलों की विशिष्ट सूची को दस्तावेज करते हैं जहां SQL सर्वर एक अनुकूलन बाड़ (या विपरीत व्यवहार) के रूप में सीटीई का सम्मान करेगा?

जवाबों:


10

... ज्ञात मामलों की सूची जहां SQL सर्वर मज़बूती से सीटीई को एक अनुकूलन बाड़ के रूप में सम्मानित करेगा

ऐसी कोई भी सूची विश्वसनीयता के बिना गारंटी के साथ देखे गए व्यवहार पर निर्भर करेगी।

SQL सर्वर क्वेरी ऑप्टिमाइज़र एक सामान्य टेबल एक्सप्रेशन को कभी भी ऑप्टिमाइज़ेशन फेंस प्रति सेगमेंट के रूप में नहीं मानता है , हालाँकि कुछ निर्माण स्पष्ट रूप से पूरे ऑप्टिमाइज़ करना मुश्किल है। रिकर्सिव CTE इसके अच्छे उदाहरण हैं।

CTEs को दृश्य / इनलाइन फ़ंक्शन / सबक्वेरी / व्युत्पन्न तालिकाओं के समान माना जाता है और क्वेरी में इनलाइन किया जाता है। किसी भी मनाया गया 'बाड़' का व्यवहार ऑप्टिमाइज़र पर निर्भर करता है कि या तो करने में सक्षम नहीं है, या नहीं करने का फैसला कर रहा है, उस सिद्धांत के पारगम्य सीमा में अनुकूलन करें।

सामान्यतया, CTE जितना सरल और अधिक 'रिलेशनल' होता है, उतनी ही अधिक संभावना यह है कि अनुकूलक बिट्स को स्थानांतरित करने में सक्षम होगा।

ऐसी विशेषताएँ जो ऑप्टिमाइज़र को CTE के 'परिणाम' पर विचार करने के लिए विचार करने या इसे लागू करने की अनुमति देती हैं, लेकिन यह अभी तक लागू नहीं किया गया है:

इस बीच, सबसे आम समाधान अस्थायी तालिका या तालिका चर में निर्धारित मध्यवर्ती परिणाम को स्पष्ट रूप से भौतिक बनाना है। यह स्पष्ट रूप से एक परिदृश्य की आवश्यकता है जो एक कथन तक सीमित नहीं है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.