2011-05-06 12 views
13

क्या नेस्टेड विचारों का उपयोग करना है या नहीं, इस पर कोई सामान्य अभ्यास है? नेस्टेड विचारों का उपयोग करते समय कोई प्रदर्शन हिट होता है? क्या कोई सबसे अच्छा अभ्यास है जो कहता है कि वास्तव में प्रदर्शन प्रदर्शन नहीं होता है जब तक आप 4 या अधिक परतों को गहरे नहीं जाते?एसक्यूएल सर्वर 2008 नेस्टिंग दृश्य

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

हालांकि शायद यह एक अच्छा अभ्यास नहीं है। क्या आप इस पर अपने विचार साझा करना चाहते हैं?

+2

विचारों को समेकन करते हैं? क्या आप एक ही आधार तालिका में शामिल हो रहे हैं? निष्पादन योजना को देखें और देखें कि क्या आपको उप इष्टतम योजनाएं मिल रही हैं या नहीं। –

+0

क्या आप "नेस्टेड व्यू" का उदाहरण प्रदान कर सकते हैं? मैं केवल शब्दावली से परिचित हूं: इनलाइन व्यू (AKA व्युत्पन्न तालिका), गैर-भौतिक और भौतिक दृश्य (SQL सर्वर में AKA अनुक्रमित दृश्य)। –

+1

@OMG - मैंने इसे उन दृश्यों के लिए लिया जो अन्य दृश्यों का संदर्भ देते हैं जो अन्य दृश्यों का संदर्भ देते हैं ... –

उत्तर

11

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

अंततः मुझे पता चला है कि परतों के इस प्रकार बहुत अधिक हैं, जब आपको बदलाव करने की आवश्यकता होती है तो इसे बनाए रखना बहुत कठिन होता है। आपको जिस फिक्स को ठीक करने की आवश्यकता है उसे ढूंढने के लिए 12 परतों के दृश्यों को ट्रैक करना कोई मजेदार नहीं है। हम भी एक मुद्दे में भाग गए क्योंकि देवताओं को अंतर्निहित परतों को ठीक करने के अलावा बस एक और परत जोड़ने के लिए आसान पाया गया था और फिर एक प्रश्न में बहुत सी तालिकाओं तक पहुंचने का प्रयास कर रहे थे और जिस तरह से उनमें से कई टेबल एक ही बहु-मिलियन रिकॉर्ड टेबल तक पहुंचे थे विचारों की विभिन्न परतों में 7 या 8 बार।

ऐसी कोई परिस्थिति नहीं है जहां मैं डेटाबेस में एक से अधिक परतों को देखने में अनुमति दूंगा और यदि आप ऐसा करते हैं तो मुझे गुस्सा होगा।

+2

+1 एसक्यूएल एक परिस्थिति है जहां घोंसले के विचारों से बचने के लिए खुद को दोहराना उचित है। – Matthew

+6

ऑप्टिमाइज़र नेस्टेड दृश्यों में सूचकांक का उपयोग तब तक कर सकते हैं जब तक कि दृश्य तर्क जटिल नहीं होता है और इंडेक्स को अस्पष्ट करता है। अनुक्रमित विचार मुद्दों का एक अलग सेट प्रस्तुत करते हैं, लेकिन सामान्य विचारों के लिए सरल जुड़ने के लिए, घोंसला अनुकूलक को इंडेक्स का उपयोग करने से नहीं रोकता है। –

+0

मेरा मतलब है कि आप विचारों पर इंडेक्स नहीं बना सकते हैं कि वे अंतर्निहित इंडेक्स का उपयोग नहीं कर सकते हैं। हालांकि, आप उस बिंदु पर बहुत जल्दी पहुंच सकते हैं जहां ऑप्टिमाइज़र यह समझ नहीं सकता कि इसे प्रभावी तरीके से कैसे संभाला जाए। इतना ही नहीं कि वे बहुत जल्दी एक अनजान गड़बड़ बन जाते हैं। यह एक एसक्यूएल एंटीपार्टर्न है जो संभव होने पर जोर से बचा जा सकता है और यह लगभग हमेशा संभव है। – HLGEM

4

अन्य विकल्पों पर विचार करने के लिए: इंडेक्स्ड दृश्य - उपयोग करने के लिए खतरनाक अगर सही ढंग से उपयोग नहीं किया है, लेकिन निष्पादन लाभ अद्भुत हो सकता है हो सकता है।

एनालिटिक्स - जैसे समूह के रूप में सेट

प्रक्रियाओं & अस्थायी तालिकाओं - डेटा आप प्रक्रिया के माध्यम से की जरूरत अस्थायी तालिकाओं के लिए यह लिख जाओ अस्थायी तालिकाओं से चुनें।

कुल मिलाकर मुझे दृश्य या नेस्टेड दृश्यों पर देखने के प्रदर्शन के प्रदर्शन को पसंद नहीं है।

आम तौर पर आप टेबल के बीच सही जुड़ने का उपयोग करके एक दृश्य उत्पन्न कर सकते हैं जिसमें आपके बाद की सारी जानकारी शामिल है और मानदंडों का उपयोग करके डेटा फ़िल्टर करें।

+0

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

+1

इसलिए मुझे यह उत्तर मिला कि क्वेरी निष्पादन योजना में इसका उपयोग करने के लिए ऑप्टिमाइज़र के लिए क्वेरी में सीधे संदर्भ में संदर्भित करने की आवश्यकता नहीं है। – user742085

+0

@user - संस्करण पर निर्भर करता है। यह केवल एंटरप्राइज़ और डेवलपर संस्करण में होता है अन्यथा आपको स्पष्ट रूप से दृश्य को संदर्भित करने और 'नोएक्सपैंड' संकेत का उपयोग करने की आवश्यकता होती है। –

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