2015-06-18 8 views
7

मेरा प्रश्न यह है कि CTE और Viewएसक्यूएल में अंतर क्या है। मेरा मतलब है कि मुझे किस मामले में CTE और View का उपयोग करना चाहिए। मुझे पता है कि दोनों कुछ प्रकार की वर्चुअल टेबल हैं लेकिन मैं उनके उपयोग को अलग नहीं कर सकता।एसक्यूएल - सीटीई बनाम देखें

मुझे एक समान प्रश्न here मिला लेकिन यह प्रदर्शन के बारे में है।

अद्यतन 1:

उदाहरण के लिए: मैं एक डेटाबेस ट्रेडों (tbl_trade) से भरा है। मुझे 3.5 मिलियन रिकॉर्ड से केवल उन ट्रेडों का चयन करना होगा जो वर्तमान समय तक चालू महीने तक खोले गए थे और फिर डेटा में हेरफेर करते हैं (वर्चुअल टेबल पर विभिन्न प्रश्नों के साथ - यह दृश्य जैसा दिखता है)। यहां समस्या यह है कि मुझे 0-3-4 कॉलम चाहिए और फिर मुझे कुछ कॉलम SUM पर जाना चाहिए और परिणाम के साथ वर्चुअल कॉलम बनाना होगा (सीटीई की तरह दिखता है)।

ईजी: tbl_trade में कॉलम हैं: profit, bonus और expenses। मैं SUM(profit), SUM(bonus), SUM(expenses) की जरूरत है और एक नया स्तंभ total जो SUM(profit) + SUM(bonus) + SUM(expenses) के बराबर हो जाएगा।

पीएस। SUM के लिए क्वेरी को पुन: हल करना एक विकल्प नहीं है क्योंकि मेरे पास पहले से ही परिणाम है।

अग्रिम धन्यवाद!

+2

एक दृश्य डेटाबेस में एक वस्तु है। एक सीटीई केवल एक ही क्वेरी की अवधि के लिए मौजूद है। वे बहुत अलग लगते हैं। क्या आप उनके बीच चयन का एक उदाहरण प्रदान कर सकते हैं? –

+0

आप कितने डेटा से निपट रहे हैं? सीटीई बड़े पैमाने पर TempDb का उपयोग करता है और यदि आपका TempDb ठीक से कॉन्फ़िगर नहीं किया गया है या आपका सीटीई बड़ी संख्या में पंक्तियों से निपट रहा है तो यह सबसे अच्छा शर्त नहीं है। बड़ी मात्रा में डेटा और सीटीई के साथ छोटे से निपटने के दौरान देखें चुनें। जब आपको रिकर्सन की आवश्यकता होती है तो आप सीटीई भी चुन सकते हैं। बस इतना ही ! –

+0

हाय और आपके उत्तरों के लिए धन्यवाद। अपडेट किए गए प्रश्न – BlackM

उत्तर

11

विचारों को अनुक्रमित किया जा सकता है लेकिन सीटीई नहीं कर सकता है। तो यह एक महत्वपूर्ण बात है। tree hierarchy अर्थात पर

CTE काम उत्कृष्ट पुनरावर्ती

इसके अलावा, विचारों पर विचार जब जटिल प्रश्न के साथ काम कर। दृश्य डेटाबेस पर एक भौतिक वस्तु है (लेकिन भौतिक रूप से डेटा संग्रहीत नहीं करता है) और कई प्रश्नों पर उपयोग किया जा सकता है, इस प्रकार लचीलापन और केंद्रीकृत दृष्टिकोण प्रदान करता है। दूसरी ओर सीटीई अस्थायी है और जब उनका उपयोग किया जाता है तो बनाया जाएगा; यही कारण है कि उन्हें inline view कहा जाता है।

अद्यतन

अपने अपडेट किए गए सवाल के अनुसार, विचारों सही चुनाव किया जाएगा। सीटीई में 3.5 मिलियन पंक्तियों के साथ काम करने से TempDb पर अतिरिक्त ओवरहेड बन जाएगा जो अंततः SQL सर्वर प्रदर्शन को धीमा कर देगा।याद रखें, सीटीई एक डिस्पोजेबल दृश्य है इसलिए कोई आंकड़ा संग्रहित नहीं होता है और आप इंडेक्स भी नहीं बना सकते हैं। यह सिर्फ एक उप प्रश्न की तरह है।

+0

"सीटीई विचारों की तुलना में बड़ी मात्रा में डेटा के साथ बहुत अच्छी तरह से काम नहीं करता है" यह सच नहीं है। सीटीई के बीच कोई अंतर नहीं है और जब तक दृश्य अनुक्रमित नहीं होता है तब तक देखें। –

+0

लेकिन क्या मैं कॉलम 1 + कॉलम 2 को कॉलम 3 के रूप में जोड़ सकता हूं और इसे क्वेरी में प्रस्तुत कर सकता हूं? – BlackM

+0

@MikaelEriksson सच है लेकिन बड़ी मात्रा में डेटा [रिकर्सिव] पर मेरे परीक्षण पर मुझे उच्च tempdb उपयोग मिला, इस प्रकार कम प्रदर्शन। हालांकि, मुझे अभी भी विश्वास है कि आपकी टिप्पणी सही है और मैं अपना जवाब संशोधित कर रहा हूं। –

3

सीटीई चुनने के कारणों में से एक: यदि आप पदानुक्रमित क्वेरी कर रहे हैं, तो सीटीई का उपयोग करें। सीटीई को रिकर्सिवली कहा जा सकता है। विचारों को पुनरावर्ती नहीं कहा जा सकता है।

6

दोनों योजना अनुकूलक द्वारा बिल्कुल वही व्याख्या की जाएगी। यह सिर्फ एक अलग बात है।

एक दृश्य का उपयोग स्वयं पर किया जा सकता है। यह जटिल बयानों को एक और सरल क्वेरी में समाहित कर सकता है।

क्या एक सीटीई ज्यादातर प्रक्रियाओं/विचारों में कम अनावश्यकता के साथ क्लीनर कोड लिखने के लिए उपयोग किया जाता था। आप पुनरावर्ती प्रश्नों के लिए भी एक सीटीई का उपयोग कर सकते हैं, जो एक बहुत ही महान और शक्तिशाली विशेषता है!

मुझे आशा है कि इससे चीजों को स्पष्ट करने में मदद मिलेगी।

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