क्या परिणाम बनाने के लिए कोई तरीका है जो वास्तव में 3 अलग-अलग गाइड के साथ आता है और अधिक नहीं? मैं CTE- प्रकार के प्रश्नों के साथ योजना गाइडों को शामिल करके भविष्य में बेहतर उत्तर देने में सक्षम होने की उम्मीद कर रहा हूं, जो कुछ SQL सर्वर CTE quirks को दूर करने के लिए कई बार संदर्भित होते हैं।
आज नहीं। गैर-पुनरावर्ती सामान्य टेबल एक्सप्रेशन (CTE) को इन-लाइन व्यू डेफिनेशन के रूप में माना जाता है और ऑप्टिमाइज़ेशन से पहले उनके द्वारा संदर्भित प्रत्येक स्थान पर तार्किक क्वेरी ट्री में विस्तारित किया जाता है। आपकी क्वेरी के लिए तार्किक पेड़ है:
LogOp_OrderByCOL: Union1007 ASC COL: Union1015 ASC
LogOp_Project COL: Union1006 COL: Union1007 COL: Union1014 COL: Union1015
LogOp_Join
LogOp_ViewAnchor
LogOp_UnionAll
LogOp_Project ScaOp_Intrinsic newid, ScaOp_Const
LogOp_Project ScaOp_Intrinsic newid, ScaOp_Const
LogOp_Project ScaOp_Intrinsic newid, ScaOp_Const
LogOp_ViewAnchor
LogOp_UnionAll
LogOp_Project ScaOp_Intrinsic newid, ScaOp_Const
LogOp_Project ScaOp_Intrinsic newid, ScaOp_Const
LogOp_Project ScaOp_Intrinsic newid, ScaOp_Const
अनुकूलन शुरू होने से पहले दो दृश्य एंकर और छह कॉल को आंतरिक फ़ंक्शन पर ध्यान दें newid
। फिर भी, बहुत से लोग मानते हैं कि आशावादी को यह पहचानने में सक्षम होना चाहिए कि विस्तारित उप-पेड़ मूल रूप से एक संदर्भित वस्तु थे और तदनुसार सरल थे। सीटीई या व्युत्पन्न तालिका के स्पष्ट भौतिककरण की अनुमति देने के लिए कई कनेक्ट अनुरोध भी किए गए हैं।
एक अधिक सामान्य कार्यान्वयन से CASE
आशावादी को प्रदर्शन में सुधार करने के लिए मनमाने ढंग से सामान्य अभिव्यक्तियों को अमल में लाने पर विचार करना होगा ( एक उपश्रेणी एक और उदाहरण है जहां समस्याएं आज हो सकती हैं)। माइक्रोसॉफ्ट रिसर्च ने 2007 में उस बैक पर एक पेपर (पीडीएफ) प्रकाशित किया , हालांकि यह आज तक लागू नहीं है। कुछ समय के लिए, हम टेबल चर और अस्थायी तालिकाओं जैसी चीजों का उपयोग करके स्पष्ट भौतिकता तक सीमित हैं।
SQLKiwi ने SSIS में योजनाओं का उल्लेख किया है, SQL सर्वर के लिए एक अच्छी योजना बनाने में सहायता करने का एक तरीका या उपयोगी उपकरण है?
यह सिर्फ मेरी ओर से इच्छाधारी सोच थी, और योजना गाइडों को संशोधित करने के विचार से परे थी। यह संभव है, सिद्धांत रूप में, शो प्लान एक्सएमएल को सीधे हेरफेर करने के लिए एक उपकरण लिखने के लिए, लेकिन टूल का उपयोग करने वाले विशिष्ट ऑप्टिमाइज़र इंस्ट्रूमेंटेशन के बिना उपयोगकर्ता के लिए एक निराशाजनक अनुभव होगा (और डेवलपर इसके बारे में सोचते हैं)।
इस प्रश्न के विशेष संदर्भ में, ऐसा उपकरण अभी भी सीटीई सामग्री को इस तरह से उपयोग करने में असमर्थ होगा जो कई उपभोक्ताओं द्वारा उपयोग किया जा सकता है (इस मामले में क्रॉस में शामिल होने के लिए दोनों इनपुटों को खिलाने के लिए)। आशावादी और निष्पादन इंजन बहु-उपभोक्ता स्पूल का समर्थन करते हैं, लेकिन केवल विशिष्ट उद्देश्यों के लिए - जिनमें से कोई भी इस विशेष उदाहरण पर लागू नहीं किया जा सकता है।
हालांकि मैं निश्चित नहीं हूं, मेरे पास एक काफी मजबूत कूबड़ है जिसे RelOps का पालन किया जा सकता है (नेस्टेड लूप, लेज़ी स्पूल) भले ही क्वेरी योजना के समान नहीं है - उदाहरण के लिए यदि आपने CTE में 4 और 5 जोड़ा है , यह अभी भी उसी योजना (प्रतीत होता है - SQL सर्वर 2012 RTM एक्सप्रेस पर परीक्षण) का उपयोग करना जारी रखता है।
यहां उचित मात्रा में लचीलापन है। एक्सएमएल योजना के व्यापक आकार का उपयोग अंतिम योजना की खोज को निर्देशित करने के लिए किया जाता है (हालांकि कई विशेषताओं को पूरी तरह से अनदेखा किया जाता है जैसे एक्सचेंजों पर विभाजन प्रकार) और सामान्य खोज नियमों के साथ-साथ काफी आराम भी किया जाता है। उदाहरण के लिए, लागत के आधार पर विकल्पों के प्रारंभिक छंटाई को अक्षम किया गया है, क्रॉस जॉइन के स्पष्ट परिचय की अनुमति है, और स्केलर संचालन को अनदेखा किया जाता है।
वहाँ गहराई में में जाने के लिए भी कई जानकारी दी जा रही है, लेकिन फिल्टर और कंप्यूट Scalars की नियुक्ति के लिए मजबूर नहीं किया जा सकता है, और फार्म की विधेय column = value
तो एक योजना को शामिल करते सामान्यीकृत कर रहे हैं X = 1
या X = @X
युक्त एक प्रश्न के लिए लागू किया जा सकता है X = 502
या X = @Y
। यह विशेष लचीलापन एक प्राकृतिक योजना को मजबूर करने में बहुत मदद कर सकता है।
विशिष्ट उदाहरण में, निरंतर संघ सभी को हमेशा एक निरंतर स्कैन के रूप में लागू किया जा सकता है; यूनियन ऑल के इनपुट की संख्या कोई मायने नहीं रखती है।