2013-06-03 4 views
27

मुझे यह तय करने में कोई समस्या है कि दृश्य या अस्थायी तालिका का उपयोग करना है या नहीं।क्या उपयोग करें? देखें या अस्थायी तालिका

मेरे पास एक संग्रहीत प्रक्रिया है जिसे मैं प्रोग्राम से कॉल करता हूं। उस एसपी में मैं एक अस्थायी तालिका में एक लंबी क्वेरी का परिणाम संग्रहीत करता हूं, कॉलम का नाम देता हूं और उस तालिका पर एक और प्रश्न बनाने के परिणाम लेबल को लेबल या ग्रिडव्यू में जोड़ता है या जो कुछ भी टेम्प टेबल छोड़ देता है। मैं प्रश्न-परिणाम को एक दृश्य में भी संग्रहीत कर सकता हूं और उस दृश्य पर प्रश्न पूछ सकता हूं। तो बेहतर क्या है या मुझे किस मामले में एक दृश्य/टेम्प तालिका का उपयोग करना है।

मेरे शोध के मुताबिक एक दृश्य का लाभ है: सुरक्षा, सरलता और कॉलम नाम विशिष्टता। मेरी अस्थायी तालिका भी उन सभी को पूरा करती है (मेरी राय के अनुसार)।

+1

जब तक आप अपने लक्ष्यों को न बताएं और उन्हें आपके महत्व के संदर्भ में रैंक न करें, यह वास्तव में एक प्रश्न है। – Tim

+0

इस प्रश्न के लिए केवल संभावित उत्तर यह है: आपको दोनों को आजमाने की कोशिश करनी होगी और देखें कि कौन सा बेहतर काम करता है। –

उत्तर

28

यदि क्वेरी "लंबी" है और आप कई प्रश्नों से परिणामों तक पहुंच रहे हैं, तो एक अस्थायी तालिका बेहतर विकल्प है।

सामान्य रूप से एक दृश्य select कथन के लिए एक छोटा सा कट है। अगर इसका मतलब यह नहीं है कि परिणाम कभी भी चलाए जाते हैं और संसाधित होते हैं। यदि आप किसी दृश्य का उपयोग करते हैं, तो परिणामों का उपयोग हर बार पुन: उत्पन्न होने की आवश्यकता होगी। हालांकि दृश्य के बाद के रन अधिक कुशल हो सकते हैं (कहें क्योंकि दृश्य क्वेरी द्वारा उपयोग किए गए पृष्ठ कैश में हैं), एक अस्थायी तालिका वास्तव में परिणाम संग्रहीत करती है।

SQL सर्वर में, आप तालिका चर (declare @t table . . .) का भी उपयोग कर सकते हैं।

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

6

, निर्भर करता है

एक दृश्य अपने "लंबे क्वेरी" हर बार चलाया जाता है के प्रसंस्करण को दोहराने चाहिए, जबकि एक अस्थायी तालिका के परिणाम संग्रहीत करता है।

तो क्या आप अधिक प्रसंस्करण या अधिक संग्रहण का उपयोग करना चाहते हैं?

आप कुछ दृश्य मान (लगातार सूचकांक) स्टोर कर सकते हैं जो प्रसंस्करण पर सहायता कर सकते हैं, लेकिन आप वास्तव में इसका पता लगाने के लिए पर्याप्त जानकारी प्रदान नहीं करते हैं।

यदि आप केवल एक प्रक्रिया कॉल के भीतर उपयोग के लिए डेटा संग्रहीत करने के बारे में बात कर रहे हैं, तो एक अस्थायी तालिका जाने का तरीका है।

2

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

फिर, परिदृश्य हैं जहां दृश्य बेहतर विकल्प हो सकते हैं [जैसा कि एकाधिक डेटाबेस सर्वरों में ठीक से संभाला नहीं जाता है] लेकिन यह इस बात पर निर्भर करता है कि आप क्या करना चाहते हैं।

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