कोर्स
यदि आप SQL (विशेषकर PostgreSQL उपयोगकर्ता) के साथ व्यापक रूप से या औसत स्तर पर डेटाबेस क्वेरी करने का काम करते हैं, तो संभव है कि आपने महत्वपूर्ण सवालों के जवाब खोजने के लिए कई जटिल क्वेरियाँ लिखी हों। साथ ही, कई बार ऐसा भी होता है कि आपको अपने काम में उन क्वेरियों के परिणामों का बार-बार उपयोग करना पड़ता है। किसी जटिल क्वेरी को कई बार चलाना महंगा पड़ सकता है। क्या कोई तरीका है जिससे किसी जटिल क्वेरी के परिणामों को कैश करके प्रदर्शन बेहतर किया जा सके? जी हाँ, इसके लिए materialized views मौजूद हैं।
आप सोच रहे होंगे कि साधारण views भी तो होते हैं जो किसी क्वेरी के परिणाम को संग्रहीत कर सकते हैं। लेकिन साधारण व्यू कई मामलों में materialized view से अलग होते हैं। PostgreSQL के आधिकारिक दस्तावेज़ साधारण व्यू के बारे में यह कहते हैं -
व्यू को भौतिक रूप से materialize नहीं किया जाता। इसके बजाय, जब भी किसी क्वेरी में व्यू का संदर्भ दिया जाता है, उस समय क्वेरी चलाई जाती है।
इसका अर्थ है कि साधारण व्यू डेटाबेस में भौतिक रूप से संग्रहीत नहीं होते। जब भी किसी क्वेरी में व्यू का उपयोग होता है, तो उस व्यू को बनाने वाली क्वेरी फिर से निष्पादित होती है। यही कारण है कि अभिगमन समय के मामले में साधारण व्यू कुछ हद तक कम कुशल हो सकते हैं।
दूसरी ओर, materialized views आपको व्यू को डेटाबेस में भौतिक रूप से स्थायी रूप से संग्रहीत करने की सुविधा देकर काफी लचीलापन देते हैं। और आप materialized views पर वैसे ही काम कर सकते हैं जैसे साधारण व्यू पर करते हैं (लेकिन कम अभिगमन समय के साथ)। इस ट्यूटोरियल के शेष हिस्से में, आप PostgreSQL में materialized views के बारे में अध्ययन करेंगे। अपने एक वेबिनार में, DataCamp के चीफ डेटा साइंटिस्ट David Robinson ने दिखाया कि वे जटिल क्वेरियों के परिणामों को प्रभावी ढंग से संग्रहीत करने के लिए materialized views का कैसे उपयोग करते हैं।
ध्यान दें कि इस ट्यूटोरियल के साथ चलने के लिए, आपको Joining Data in SQL कोर्स में कवर की गई सामग्री से परिचित होना चाहिए।
प्रारंभिक डेटाबेस सेटअप
PostgreSQL में एक डेटाबेस सेटअप करना और उसमें एक बुनियादी तालिका बनाना बेहतर है ताकि आप उस पर प्रभावी ढंग से क्वेरी कर सकें। यह इस ट्यूटोरियल के अगले अनुभागों में भी आपकी मदद करेगा। आप यह डेटाबेस बैकअप रिस्टोर कर सकते हैं, जिसमें वह तालिका शामिल है जिसका उपयोग आप इस ट्यूटोरियल में करने वाले हैं। यदि आप PostgreSQL में डेटाबेस बैकअप को रिस्टोर करना सीखना चाहते हैं, तो आप इस ट्यूटोरियल के पहले अनुभाग का अनुसरण कर सकते हैं।
यदि आप बैकअप रिस्टोर करने में सक्षम रहे, तो आपको डेटाबेस के भीतर international_debt नाम की एक तालिका दिखनी चाहिए (यदि आपके पास कोई डेटाबेस नहीं है, तो पहले आपको एक बनाना होगा)। आइए तालिका की शुरुआती कुछ पंक्तियाँ तेजी से देखें (इसके लिए एक साधारण select क्वेरी काफी होगी) -

तालिका में दुनिया भर के विभिन्न देशों की इस चालू वर्ष में अलग-अलग श्रेणियों (कॉलम indicator_name, indicator_code देखें) में ऋण संबंधी आँकड़ों की जानकारी है। debt कॉलम दिखाता है कि किसी विशेष श्रेणी में किसी देश पर कितना ऋण (USD में) है। यह डेटा अर्थशास्त्र के क्षेत्र से संबंधित है और विभिन्न देशों की आर्थिक स्थिति का विश्लेषण करने के लिए अक्सर उपयोग किया जाता है। डेटा World Bank से लिया गया है।
अब जब आपने सफलतापूर्वक एक डेटाबेस सेटअप कर लिया है, तो आप इस ट्यूटोरियल के अगले अनुभागों पर आगे बढ़ने के लिए तैयार हैं।
Materialized Views बनाना
आइए निम्नलिखित क्वेरी का एक materialized view बनाते हैं -
select country_name,
sum(debt) as total_debt
from international_debt
group by country_name order by country_name;
यह क्वेरी देशों के नाम उनके कुल ऋण (वर्णानुक्रम में) के साथ लौटाती है। क्वेरी का आउटपुट कुछ इस प्रकार दिखना चाहिए -

अब materialized view -
CREATE MATERIALIZED VIEW country_total_debt
as
select country_name,
sum(debt) as total_debt
from international_debt
group by country_name order by country_name;
आपको इस प्रकार का सफल संदेश मिलना चाहिए - Query returned successfully: 124 rows affected, 242 ms execution time.
Materialized View को Refresh करना
आप PostgreSQL को यह निर्देश भी दे सकते हैं कि materialized view बनाते समय उसमें कोई डेटा लोड न किया जाए, इसके लिए WITH NO DATA विकल्प निर्दिष्ट करें -
CREATE MATERIALIZED VIEW country_total_debt_2
as
select country_name,
sum(debt) as total_debt
from international_debt
group by country_name order by country_name
WITH NO DATA;
आपको यह संदेश मिलेगा - Query returned successfully with no result in 41 ms. दोनों आउटपुट संदेशों के बीच के अंतर पर ध्यान दें। यदि आप WITH NO DATA विकल्प जोड़ते हैं, तो एक खाली materialized view बनता है। आप इस materialized view पर क्वेरी नहीं चला सकते। हालांकि, आप इसे निम्न कमांड चलाकर डेटा से भर सकते हैं -
REFRESH MATERIALIZED VIEW country_total_debt_2;
Materialized View पर क्वेरी करना
अब तक, आपके पास दो materialized views (country_total_debt, country_total_debt_2) बन चुके होने चाहिए। आइए इनमें से किसी एक पर एक साधारण select क्वेरी चलाएँ -
select * from country_total_debt_2;
क्वेरी का परिणाम कुछ इस तरह होना चाहिए -

आउटपुट बिल्कुल वही है जिसे हमने materialized view में लपेटा था। आप materialized views पर एग्रीगेट फंक्शनों के साथ भी क्वेरी चला सकते हैं -
select max(total_debt) from country_total_debt_2;
आपको यह मिलेगा - 
Materialized View हटाना
PostgreSQL में materialized views को ठीक उसी तरह हटाया जा सकता है जैसे तालिकाएँ हटाई जाती हैं। आपको बस Drop के बाद Materialized View निर्दिष्ट करना है -
Drop Materialized View country_total_debt_2;
MySQL की तुलना इसके दूसरे सबसे लोकप्रिय प्रतिस्पर्धी से करने के लिए, हमारा विस्तृत तुलना लेख PostgreSQL बनाम MySQL देखें।
निष्कर्ष
इस ट्यूटोरियल के लिए बस इतना ही। अंत तक पढ़ने के लिए धन्यवाद। इस ट्यूटोरियल में, आपने PostgreSQL में materialized views के बारे में सीखा और यह भी कि आप उन पर कैसे काम कर सकते हैं। अपनी उपयोगिता के कारण, materialized views का डेटाबेस वेयरहाउसिंग में व्यापक रूप से उपयोग होता है। यदि आप और जटिल क्वेरियाँ सीखने में रुचि रखते हैं, तो आप निम्नलिखित DataCamp कोर्स देख सकते हैं: