2010-07-26 10 views
6

मैं कुछ एसक्यूएल है कि इस तरह मोटे तौर पर लग रहा है मिल गया है:प्रदर्शन T-SQL की विशेषताओं सीटीई

with InterestingObjects(ObjectID, OtherInformation, Whatever) as (
    select X.ObjectID, Y.OtherInformation, Z.Whatever 
    from X join Y join Z -- abbreviated for brevity 
) 

-- ...long query follows, which uses InterestingObjects in several more CTEs, 
-- and then uses those CTEs in a select statement at the end. 

जब मैंने इसे चलाने के लिए, मैं कार्य योजना लागू करके ऐसा लगता है कि में क्वेरी चल रहा हो में देख सकते हैं सीटीई मूल रूप से प्रत्येक बार सीटीई संदर्भित किया जाता है। यदि मैं इसके बजाय एक temp table #InterestingObjects बनाता हूं और इसका उपयोग करता हूं, बेशक, यह एक बार क्वेरी चलाता है, परिणाम को अस्थायी तालिका में रखता है, और तब से पूछताछ करता है। मेरे विशेष उदाहरण में, यह पूरी चीज को बहुत तेजी से चलाता है।

मेरा प्रश्न है: क्या यह हमेशा मैं सीटीई से उम्मीद कर सकता हूं (परिणामों को किसी भी तरह से याद नहीं कर रहा हूं, जैसे कि यह हर जगह क्वेरी को रेखांकित कर रहा हो?) क्या कोई कारण है कि SQL सर्वर इसे बेहतर अनुकूलित नहीं कर सकता है? आम तौर पर मुझे आश्चर्य है कि ऑप्टिमाइज़र कितना स्मार्ट है, लेकिन मुझे आश्चर्य है कि यह इसे समझ नहीं पाया।

(संपादित करें:। Btw, मैं एसक्यूएल सर्वर '08 आर 2 पर इस चल रहा हूँ)

+0

स्टैक ओवरफ्लो उपयोगकर्ता Quassnoi http://stackoverflow.com/users/55159/quassnoi ने इस पर एक दिलचस्प लेख लिखा। http://explainextended.com/2009/05/28/generating-xml-in-subqueries/ –

+0

यह दिलचस्प है। मैं किसी भी बाधाओं के तहत परिचालन नहीं कर रहा हूं जैसे कि वह वर्णन करता है (उदाहरण के लिए एक ओआरएम के माध्यम से जा रहा है जो अस्थायी तालिकाओं की अनुमति नहीं देता है) इसलिए मैं वास्तव में नहीं देखता कि उसकी विधि अस्थायी तालिकाओं की तुलना में क्यों अच्छी है - और जाहिर है कि यदि आप एक योजना को हार्डकोड करते हैं इस तरह, जब आप क्वेरी बदलते हैं तो यह एक बड़ी रखरखाव लागत है। फिर भी, निष्पादन योजना इस व्यवहार को कैसे नियंत्रित करती है, इस बारे में वास्तव में उपयोगी दृश्य। – alphabasic

उत्तर

4

CTE के बेहतर या बदतर हो सकता है, बस वे किस तरह इस्तेमाल कर रहे हैं (प्रत्यावर्तन, अनुक्रमण, आदि की अवधारणाओं को शामिल पर निर्भर करता है ।)। आपको यह आलेख दिलचस्प लगेगा: http://www.sqlservercentral.com/articles/T-SQL/2926/

संबंधित मुद्दे