नहीं , Microsoft के व्यवहार की गारंटी से कोई प्रलेखन नहीं है, इसलिए इसकी गारंटी नहीं है ।
इसके अतिरिक्त, यह मानते हुए कि सरल टॉक लेख सही है, और यह कि कॉनकैटैनेशन फिजिकल ऑपरेटर हमेशा योजना में दिखाए गए क्रम में इनपुट की प्रक्रिया करता है (बहुत हद तक सच होने की संभावना है), फिर बिना किसी गारंटी के कि SQL Server हमेशा ऐसी योजनाएं बनाएगा जो समान रहें क्वेरी पाठ और क्वेरी योजना के बीच का क्रम, आप केवल थोड़ा बेहतर हैं।
हम हालांकि इसकी आगे जांच कर सकते हैं। यदि क्वेरी ऑप्टिमाइज़र कॉनकनेटेशन ऑपरेटर इनपुट को फिर से व्यवस्थित करने में सक्षम था, तो sys.dm_exec_query_transformation_stats
उस अनुकूलन के अनुरूप अनिर्धारित DMV में पंक्तियाँ मौजूद होनी चाहिए ।
SELECT * FROM sys.dm_exec_query_transformation_stats
WHERE name LIKE '%CON%' OR name LIKE '%UNIA%'
SQL सर्वर 2012 एंटरप्राइज़ संस्करण पर, यह 24 पंक्तियों का उत्पादन करता है। स्थिरांक से संबंधित परिवर्तनों के लिए झूठे मेलों को नजरअंदाज करना, कॉन्टैटेनेशन फिजिकल ऑपरेटर UNIAtoCON
(यूनियन ऑल टू कॉनटेनेशन) से संबंधित एक परिवर्तन है । इसलिए, भौतिक ऑपरेटर स्तर पर, यह प्रतीत होता है कि एक बार एक संघचालक का चयन करने के बाद, इसे उस तार्किक यूनियन ऑल ऑपरेटर के क्रम में संसाधित किया जाएगा जहां से इसे प्राप्त किया गया था।
वास्तव में यह बिल्कुल सच नहीं है। पोस्ट-ऑप्टिमाइज़ेशन रीराइट्स मौजूद हैं जो लागत-आधारित ऑप्टिमाइज़ेशन के पूरा होने के बाद एक भौतिक कॉन्टैक्शन ऑपरेटर को इनपुट को फिर से व्यवस्थित कर सकते हैं। एक उदाहरण तब होता है जब Concatenation एक पंक्ति लक्ष्य के अधीन होता है (इसलिए पहले सस्ता इनपुट से पढ़ना महत्वपूर्ण हो सकता है)। अधिक विवरण के लिए पॉल व्हाइट द्वारा UNION ALL
अनुकूलन देखें ।
यह देर से भौतिक पुनः लेखन SQL Server 2008 R2 के लिए और कार्यात्मक था, लेकिन एक प्रतिगमन का मतलब यह था कि यह अब SQL सर्वर 2012 और बाद में लागू नहीं होगा। एक निर्धारण जारी किया गया है जो SQL सर्वर 2014 और बाद में (2012 नहीं) क्वेरी ऑप्टिमाइज़र हॉटफ़िक्स सक्षम (जैसे ट्रेस ध्वज 4199) के साथ इस पुनर्लेखन को पुनर्स्थापित करता है।
लेकिन लॉजिकल यूनियन ऑल ऑपरेटर ( UNIA
) के बारे में? एक UNIAReorderInputs
परिवर्तन है, जो इनपुट को फिर से व्यवस्थित कर सकता है। दो भौतिक ऑपरेटर भी हैं जिनका उपयोग तार्किक संघ सभी को लागू करने के लिए किया जा सकता है, UNIAtoCON
और UNIAtoMERGE
(यूनियन ऑल टू मर्ज यूनियन)।
इसलिए ऐसा प्रतीत होता है कि क्वेरी ऑप्टिमाइज़र इनपुट को फिर से चालू कर सकता है UNION ALL
; हालाँकि, यह एक सामान्य परिवर्तन नहीं प्रतीत होता है ( UNIAReorderInputs
SQL सर्वर पर शून्य उपयोग जो मैंने आसानी से सुलभ है। हम उन परिस्थितियों को नहीं जानते हैं जो अनुकूलक का उपयोग करेंगी UNIAReorderInputs
; हालाँकि यह योजना गाइड या उपयोग के समय निश्चित रूप से उपयोग की जाती है; योजना संकेत का उपयोग उपर्युक्त उल्लिखित पंक्ति लक्ष्य भौतिक पुन: व्यवस्थित इनपुट का उपयोग करके उत्पन्न योजना को बाध्य करने के लिए किया जाता है।
क्या एक बार में एक से अधिक इनपुट से इंजन की प्रक्रिया करने का कोई तरीका है?
कॉन्टेनेटेशन फिजिकल ऑपरेटर किसी योजना के समानांतर सेक्शन में मौजूद हो सकता है। कुछ कठिनाई के साथ, मैं निम्नलिखित क्वेरी का उपयोग करके समांतर समाप् त योजना तैयार करने में सक्षम था:
SELECT userid, regdate FROM ( --Users table is around 3mil rows
SELECT userid, RegDate FROM users WHERE userid > 1000000
UNION
SELECT userid, RegDate FROM users WHERE userid < 1000000
UNION all
SELECT userid, RegDate FROM users WHERE userid < 2000000
) d ORDER BY RegDate OPTION (RECOMPILE)
इसलिए, सबसे सख्त अर्थ में, शारीरिक संबंध ऑपरेटर हमेशा एक सुसंगत फैशन में इनपुट की प्रक्रिया करता है (शीर्ष एक पहले, निचला भाग); हालाँकि, ऑप्टिमाइज़र भौतिक ऑपरेटर को चुनने से पहले इनपुट के क्रम को बदल सकता है, या एक कॉनटेनमेंट के बजाय मर्ज यूनियन का उपयोग कर सकता है।