SQL Server में भौतिक विचार कैसे बनाएं?


101

मैं एक DW डिजाइन करने जा रहा हूं और मैंने भौतिक विचारों के बारे में सुना है। दरअसल मैं एक व्यू बनाना चाहता हूं और बेस टेबल में बदलाव होने पर यह अपने आप अपडेट हो जाना चाहिए। किसी को भी एक उदाहरण के साथ समझा सकते हैं ..

जवाबों:


144

उन्हें SQL सर्वर में अनुक्रमित दृश्य कहा जाता है - अधिक पृष्ठभूमि के लिए ये श्वेत पत्र पढ़ें:

मूल रूप से, आपको बस इतना करना है:

  • एक नियमित दृश्य बनाएं
  • उस दृश्य पर एक संकुल सूचकांक बनाएँ

और आपने कल लिया!

मुश्किल हिस्सा यह है: दृश्य को काफी बाधाओं और सीमाओं को पूरा करना है - जो कि श्वेत पत्र में उल्लिखित हैं। यदि आप ऐसा करते हैं - यही सब कुछ है। दृश्य स्वचालित रूप से अपडेट किया जा रहा है, कोई रखरखाव की आवश्यकता नहीं है।

अतिरिक्त संसाधन:


आपके जवाब के लिए धन्यवाद। मुझे वह मिला जो मैं चाहता हूं .. मैं इंडेक्स के बारे में भी जानना चाहूंगा। मैं जानना चाहता हूं कि SQL सर्वर में स्टार स्कीमा आरेख उत्पन्न करने का कोई तरीका है जब मेरे पास सभी तालिका संरचना तैयार है? यदि हाँ, तो मैं उसके लिए तथ्य तालिका कैसे बनाऊं?
दीपक

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

2
जैसा कि संबंधित प्रश्न में उल्लेख किया गया है, MSDN ब्लॉग लेख, blogs.msdn.microsoft.com/ssma/2011/06/20/… , भौतिक विचारों और अनुक्रमित विचारों के बीच कुछ प्रमुख अंतरों पर प्रकाश डालता है। सबसे अधिक समस्याग्रस्त IMHO ताज़ा ट्रिगर निर्दिष्ट करने में सक्षम नहीं हो रहा है: जब भी बेस तालिकाओं को अपडेट किया जाता है, तो अनुक्रमित दृश्य अपडेट किए जाते हैं - भौतिकवादी दृश्य का उपयोग करने के अधिकांश प्रदर्शन लाभों को कम करके। जब तक डेटा अक्सर परिवर्तित नहीं होता है, तब तक जॉइन, एग्रीगेट, विंडोिंग फ़ंक्शंस और सबक्वेरी पर निषेध अनुक्रमित विचारों को लगभग व्यर्थ बना देता है।
सनकैट २२

43

हालांकि विशुद्ध रूप से इंजीनियरिंग के नजरिए से, अनुक्रमणित दृश्य कुछ ऐसा लगता है जैसे हर कोई प्रदर्शन को बेहतर बनाने के लिए उपयोग कर सकता है लेकिन वास्तविक जीवन परिदृश्य बहुत अलग है। मैं असफल रहा हूँ अनुक्रमित विचारों का उपयोग कर रहा हूँ जहाँ मैं सबसे ज्यादा जरूरत है कि क्या अनुक्रमित किया जा सकता है और क्या नहीं कर सकते हैं पर कई प्रतिबंधों के कारण।

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

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

मैं कुछ वास्तविक जीवन परिदृश्यों को सुनकर रोमांचित हो जाऊंगा जहां लोगों ने वास्तव में अपने लाभ के लिए अनुक्रमित विचारों का उपयोग किया है और उनके बिना नहीं किया जा सकता है


वास्तव में मैंने एक पूर्ण पाठ खोज सूचकांक को विभाजित करने के लिए अनुक्रमित दृश्यों (सिर्फ एक बार) का उपयोग किया है। FTS इंडेक्स को वास्तव में विभाजित नहीं किया जा सकता है, लेकिन एक ही टेबल से कई दृश्यों पर अलग-अलग इंडेक्स बनाए जा सकते हैं। यह एक अंतिम उपाय की तरह था, हालांकि।
११:१५ बजे अय्यसराम

4
आपको (NOEXPAND)अनुक्रमित विचारों का उपयोग करने वाले प्रश्नों में संकेत जोड़ने के लिए याद रखने की आवश्यकता है । और फिर आपको अंतर दिखाई देता है। अनुक्रमित दृश्यों बनाम "तालिकाओं को ठीक से अनुक्रमित" का उपयोग करने का लाभ रिकॉर्ड चयन को सीमित करने में है, अन्यथा आप सही हैं, यह समान होगा।
अजेह

हाँ NOEXPAND बात समझ में नहीं आती!
सिमोन_विवर

18

वास्तव में एक भौतिकीकृत दृश्य क्या है, इस पर आपको थोड़ी और पृष्ठभूमि की आवश्यकता हो सकती है। ओरेकल में ये एक ऐसी वस्तु है जिसमें कई तत्व शामिल होते हैं जब आप इसे कहीं और बनाने की कोशिश करते हैं।

एमवीयूई एक अन्य स्रोत से डेटा का स्नैपशॉट है। जब आप दृश्य को स्थानीय रूप से तालिका के रूप में संग्रहीत किया जाता है, तो क्वेरी के अनुसार डेटा नहीं मिलता है। MVView एक पृष्ठभूमि प्रक्रिया का उपयोग करके ताज़ा किया जाता है जो नियमित अंतराल पर बंद होता है या जब स्रोत डेटा बदलता है। ओरेकल पूर्ण या आंशिक रिफ्रेश के लिए अनुमति देता है।

SQL सर्वर में, मैं नियमित रूप से ताज़ा (पूर्ण) मूल एमवीएड बनाने के लिए निम्नलिखित का उपयोग करूंगा।

सबसे पहले, एक दृश्य। यह अधिकांश के लिए आसान होना चाहिए क्योंकि किसी भी डेटाबेस में दृश्य काफी आम हैं अगला, एक तालिका। यह कॉलम और डेटा में दृश्य के समान होना चाहिए। यह दृश्य डेटा का एक स्नैपशॉट संग्रहीत करेगा। फिर, एक प्रक्रिया जो तालिका को काटती है, और दृश्य में वर्तमान डेटा के आधार पर इसे फिर से लोड करती है। अंत में, एक काम जो शुरू करने की प्रक्रिया को ट्रिगर करता है वह है काम।

बाकी सब प्रयोग है।


5
SQL सर्वर के बारे में आपकी टिप्पणी गलत है - भौतिक विचार ओरेकल और एसक्यूएल सर्वर में बहुत अलग चीजें हैं। SQL सर्वर में, उस पर एक अद्वितीय क्लस्टर इंडेक्स वाला एक दृश्य (उर्फ एक "भौतिक दृश्य") उपयोगकर्ता द्वारा अपडेट नहीं किया जा सकता है, और न ही इसे एक अलग उपयोगकर्ता-निर्मित तालिका में संग्रहीत किया जाता है - यह हमेशा अपडेट किया जाता है अपडेट के दौरान इंजन, और सिंक से बाहर कभी नहीं है। डेटा के स्नैपशॉट को स्टोर करने के लिए कोई काम नहीं होना चाहिए।
एरिक

10
ओपी ने जो मांगा है वह आसानी से अनुक्रमित दृश्य द्वारा प्रदान किया गया है। SQL सर्वर मूल रूप से ओरेकल मटेरियलाइज्ड दृश्य के लिए प्रदान करता है। हालाँकि, यदि आप चाहते हैं / एक Oracle MVView के काम करने के तरीके को ठीक से दोहराने की आवश्यकता है, तो जेसन सही है। जेसन का दृष्टिकोण भी इसी परिदृश्य में मदद करता है ओरेकल MVViews - उदाहरण के लिए रिपोर्टिंग टेबल की ताज़गी से बाहर कर सकते हैं, जहाँ आप डेटाबेस लोड के बारे में अधिक ध्यान रखते हैं कि दृश्य कितना अद्यतित है (जैसे कि केवल कल की संख्या पर रिपोर्टिंग ...)

4

जब अनुक्रमित दृश्य एक विकल्प नहीं है, और त्वरित अपडेट आवश्यक नहीं हैं, तो आप एक हैक कैश टेबल बना सकते हैं:

select * into cachetablename from myviewname
alter table cachetablename add primary key (columns)
-- OR alter table cachetablename add rid bigint identity primary key
create index...

फिर sp_rename व्यू / टेबल या किसी भी प्रश्न या अन्य विचार को बदल दें जो इसे कैश टेबल पर इंगित करता है।

अनुसूची दैनिक / रात / साप्ताहिक / क्या नहीं जैसा ताज़ा करें

begin transaction
truncate table cachetablename
insert into cachetablename select * from viewname
commit transaction

एनबी: यह आपके टीएक्स लॉग में भी जगह खाएगा। छोटे डेटासेट के लिए सबसे अच्छा उपयोग किया जाता है जो गणना करने में धीमा होता है। शायद "आसान लेकिन बड़े" कॉलम को बाहरी दृश्य में सबसे पहले खत्म करने के लिए रिफ्लेक्टर।


1

एमएस टी-एसक्यूएल सर्वर के लिए, मैं सुझाव देता हूं कि "शामिल" कथन के साथ एक इंडेक्स बनाएं। विशिष्टता की आवश्यकता नहीं है, न ही एक क्लस्टर सूचकांक के साथ जुड़े डेटा की भौतिक छँटाई है। "सूचकांक ... शामिल करें ()" सिस्टम द्वारा स्वचालित रूप से बनाए रखा गया एक अलग भौतिक डेटा संग्रहण बनाता है। यह वैचारिक रूप से ओरेकल मटेरियल व्यू के समान है।

https://msdn.microsoft.com/en-us/library/ms190806.aspx

https://technet.microsoft.com/en-us/library/ms189607(v=sql.105).aspx

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.