जवाबों:
इस तरह की चीजों के बारे में सोचते समय आपको अपने प्रश्नों के निष्पादन की योजना की तुलना करनी चाहिए।
आपकी क्वेरी के लिए निष्पादन योजना का आकार निश्चित रूप से इस बात पर निर्भर करता है कि आपके टेबल में कितनी पंक्तियाँ हैं और कौन से सूचकांक परिभाषित हैं।
एक परिदृश्य जो दिखाता है कि प्रदर्शन में कोई अंतर नहीं है जब वहाँ की A
तुलना में काफी अधिक पंक्तियाँ हैं B
। इसके बाद ऑप्टिमाइज़र B
नेस्टेड लूप में ड्राइविंग टेबल को चुन लेगा A
। एक सही परिणाम प्राप्त करने के लिए B
दोनों प्रश्नों में टेबल पर स्ट्रीम एग्रीगेट का उपयोग करना होता है ताकि केवल अलग-अलग पंक्तियों को प्राप्त किया जा सके B
। इसलिए इस मामले में विशिष्ट कीवर्ड के प्रदर्शन पर कोई प्रभाव नहीं पड़ता है।
परीक्षण करने के लिए दो अन्य स्पष्ट मामलों के लिए निष्पादन योजना, बी में ए से अधिक पंक्तियां और तालिकाओं में पंक्तियों की समान संख्या भी प्रश्नों के लिए सटीक निष्पादन योजना को दर्शाती है।
अपडेट करें
क्वेरी ऑप्टिमाइज़ेशन होने से पहले क्वेरी एक सरलीकरण चरण के माध्यम से जाती है। आप देख सकते हैं कि ट्रेस ध्वज 8606 का उपयोग करके तार्किक पेड़ कैसा दिखता है।
प्रश्नों के लिए इनपुट ट्री स्पष्ट रूप से अलग हैं, लेकिन सरलीकरण के बाद वे समान हैं।
रेफरी: अधिक अनजाने में क्वेरी ऑप्टिमाइज़र ट्रेस फ्लैग्स और क्वेरी ऑप्टिमाइज़र डीप डाइव - भाग 2
इनपुट ट्री और क्वेरी के लिए सरलीकृत पेड़
*** Input Tree: ***
LogOp_Project QCOL: [xx].[dbo].[A].SomeColumn
LogOp_Select
LogOp_Get TBL: A A TableID=213679909 TableReferenceID=0 IsRow: COL: IsBaseRow1002
ScaOp_SomeComp 2
ScaOp_Identifier QCOL: [xx].[dbo].[A].SomeColumn
LogOp_GbAgg OUT(QCOL: [xx].[dbo].[B].SomeColumn,) BY(QCOL: [xx].[dbo].[B].SomeColumn,)
LogOp_Project
LogOp_Project
LogOp_Get TBL: B B TableID=229679966 TableReferenceID=0 IsRow: COL: IsBaseRow1006
AncOp_PrjList
AncOp_PrjList
AncOp_PrjList
AncOp_PrjList
*******************
*** Simplified Tree: ***
LogOp_LeftSemiJoin
LogOp_Get TBL: A A TableID=213679909 TableReferenceID=0 IsRow: COL: IsBaseRow1002
LogOp_Get TBL: B B TableID=229679966 TableReferenceID=0 IsRow: COL: IsBaseRow1006
ScaOp_Comp x_cmpEq
ScaOp_Identifier QCOL: [xx].[dbo].[A].SomeColumn
ScaOp_Identifier QCOL: [xx].[dbo].[B].SomeColumn
*******************
इनपुट ट्री और सरलीकृत पेड़ क्वेरी के लिए अलग उपयोग नहीं :
*** Input Tree: ***
LogOp_Project QCOL: [xx].[dbo].[A].SomeColumn
LogOp_Select
LogOp_Get TBL: A A TableID=213679909 TableReferenceID=0 IsRow: COL: IsBaseRow1002
ScaOp_SomeComp 2
ScaOp_Identifier QCOL: [xx].[dbo].[A].SomeColumn
LogOp_Project
LogOp_Get TBL: B B TableID=229679966 TableReferenceID=0 IsRow: COL: IsBaseRow1006
AncOp_PrjList
AncOp_PrjList
*******************
*** Simplified Tree: ***
LogOp_LeftSemiJoin
LogOp_Get TBL: A A TableID=213679909 TableReferenceID=0 IsRow: COL: IsBaseRow1002
LogOp_Get TBL: B B TableID=229679966 TableReferenceID=0 IsRow: COL: IsBaseRow1006
ScaOp_Comp x_cmpEq
ScaOp_Identifier QCOL: [xx].[dbo].[A].SomeColumn
ScaOp_Identifier QCOL: [xx].[dbo].[B].SomeColumn
*******************