oracle - ओरेकल में दृश्य और भौतिक दृश्यों के बीच क्या अंतर है?




views materialized-views (8)

ओरेकल में दृश्य और भौतिक दृश्यों के बीच क्या अंतर है?


Answers

देखें: देखें सिर्फ एक नामित क्वेरी है। यह कुछ भी स्टोर नहीं करता है। जब कोई प्रश्न देखने पर होता है, तो यह दृश्य परिभाषा की क्वेरी चलाता है। वास्तविक डेटा तालिका से आता है।

मटेरियलाइज्ड व्यू: भौतिक रूप से स्टोर डेटा और समय-समय पर अपडेट हो जाते हैं। एमवी पूछताछ करते समय, यह एमवी से डेटा देता है।


मटेरियलाइज्ड व्यू डिस्क आधारित हैं और समय-समय पर क्वेरी परिभाषा के आधार पर अपडेट किए जाते हैं।

दृश्य केवल आभासी होते हैं और जब भी उन्हें एक्सेस किया जाता है तो क्वेरी परिभाषा चलाते हैं।


माइक मैकलिस्टर के सुंदर-पूर्ण उत्तर में जोड़ना ...

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

जब आप एक भौतिक दृश्य बनाते हैं, तो आप पाएंगे कि ओरेकल दोनों ही विचार और एक ही नाम के साथ एक टेबल के रूप में बनाता है, जो चीजों को भ्रमित कर सकता है।


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

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

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

सामग्रियों के विचार अक्सर डेटा वेयरहाउसिंग / बिजनेस इंटेलिजेंस अनुप्रयोगों में उपयोग किए जाते हैं, जहां हजारों लाखों पंक्तियों के साथ बड़ी तथ्य सारणी पूछताछ के परिणामस्वरूप क्वेरी प्रतिक्रिया समय होता है जिसके परिणामस्वरूप एक अनुपयोगी अनुप्रयोग होता है।


मटेरियलाइज्ड व्यू - डिस्क पर एक टेबल जिसमें क्वेरी का परिणाम सेट होता है

गैर-मटेरियस व्यू - एक क्वेरी जो अंतर्निहित तालिका से डेटा खींचती है


एक अंतर्निहित तालिकाओं से डेटा खींचने के लिए एक क्वेरी का उपयोग करता है।

एक भौतिक दृश्य डिस्क पर एक तालिका है जिसमें क्वेरी का परिणाम सेट होता है।

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


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

लेकिन मटेरियलाइज्ड व्यू स्कीमा ऑब्जेक्ट्स हैं, यह एक अलग स्कीमा ऑब्जेक्ट में एक क्वेरी के परिणाम संग्रहीत करता है (यानी, स्टोरेज स्पेस लेना और डेटा रखना)। यह इंगित करता है कि भौतिक दृश्य तालिका डेटा की भौतिक रूप से अलग प्रतिलिपि वापस कर रहा है


12.1 से पहले, ओरेकल LIMIT या OFFSET कीवर्ड का समर्थन नहीं करता है। यदि आप परिणाम सेट के एम के माध्यम से पंक्तियों को पुनर्प्राप्त करना चाहते हैं, तो आपको कुछ ऐसा चाहिए:

SELECT a.*
  FROM (SELECT b.*,
               rownum b_rownum
          FROM (SELECT c.*
                  FROM some_table c
                 ORDER BY some_column) b
         WHERE rownum <= <<upper limit>>) a
 WHERE b_rownum >= <<lower limit>>

या विश्लेषणात्मक कार्यों का उपयोग करना:

SELECT a.*
  FROM (SELECT b.*,
               rank() over (order by some_column) rnk
          FROM some_table)
 WHERE rnk BETWEEN <<lower limit>> AND <<upper limit>>
 ORDER BY some_column

इन दृष्टिकोणों में से कोई भी आपको सॉर्ट किए गए परिणाम के एम के माध्यम से एन को पंक्तिबद्ध करेगा।

12.1 और बाद में, आप OFFSET और / या FETCH [FIRST | NEXT] उपयोग कर सकते हैं FETCH [FIRST | NEXT] ऑपरेटर:

SELECT *
  FROM some_table
 ORDER BY some_column
 OFFSET <<lower limit>> ROWS
  FETCH NEXT <<page size>> ROWS ONLY




oracle views materialized-views