Jika Anda sering bekerja dengan SQL (lebih disukai pengguna PostgreSQL) atau pada tingkat rata-rata untuk melakukan kueri ke database, mungkin Anda pernah menulis sejumlah kueri kompleks untuk menjawab pertanyaan-pertanyaan penting. Terkadang Anda juga perlu menggunakan hasil kueri tersebut cukup sering dalam pekerjaan Anda. Menjalankan kueri kompleks berkali-kali bisa mahal. Bagaimana jika ada cara untuk melakukan cache hasil kueri kompleks demi meningkatkan kinerja? Nah, materialized view hadir untuk Anda.
Anda mungkin berpikir ada view sederhana yang juga dapat menyimpan hasil sebuah kueri. Namun, view sederhana berbeda dari materialized view dalam banyak hal. Berikut pernyataan dokumentasi resmi PostgreSQL tentang view sederhana -
View tidak dimaterialisasi secara fisik. Sebaliknya, kueri dijalankan setiap kali view direferensikan dalam sebuah kueri.
Pernyataan ini berarti view sederhana tidak disimpan secara fisik di dalam database. Setiap kali sebuah view digunakan dalam kueri, kueri yang membuat view tersebut akan dieksekusi. Inilah yang membuat view sederhana sedikit kurang efisien terkait waktu akses.
Di sisi lain, materialized view memberikan banyak fleksibilitas dengan memungkinkan Anda menyimpan sebuah view secara fisik di dalam database. Dan Anda dapat mengoperasikan materialized view sebagaimana Anda melakukannya pada view sederhana (namun dengan waktu akses yang lebih rendah). Sepanjang tutorial ini, Anda akan mempelajari materialized view di PostgreSQL. Dalam salah satu webinarnya, Chief Data Scientist DataCamp David Robinson menunjukkan bagaimana ia menggunakan materialized view untuk menyimpan hasil kueri kompleks secara efektif.
Catatan agar dapat mengikuti tutorial ini, Anda sebaiknya sudah familiar dengan materi yang dibahas dalam kursus Joining Data in SQL.
Penyiapan Awal Database
Lebih baik menyiapkan sebuah database di PostgreSQL dan membuat tabel dasar di dalamnya agar Anda dapat melakukan kueri secara efektif. Ini juga akan membantu Anda pada bagian-bagian selanjutnya dari tutorial ini. Anda dapat me-restore backup database ini yang berisi tabel yang akan Anda gunakan di tutorial ini. Jika Anda ingin mempelajari cara me-restore backup database di PostgreSQL, Anda dapat mengikuti bagian pertama dari tutorial ini.
Jika Anda berhasil me-restore backup tersebut, Anda akan melihat sebuah tabel bernama international_debt di dalam database (Anda perlu membuat database terlebih dahulu jika belum ada). Mari cepat melihat beberapa baris pertama tabel tersebut (kueri select sederhana akan membantu Anda melakukan ini) -
Tabel ini berisi informasi statistik utang berbagai negara di seluruh dunia untuk tahun berjalan dalam berbagai kategori (lihat kolom indicator_name, indicator_code). Kolom debt menunjukkan jumlah utang (dalam USD) yang dimiliki suatu negara pada kategori tertentu. Data ini berada pada domain ekonomi dan sering digunakan untuk menganalisis kondisi ekonomi berbagai negara. Data dikumpulkan dari Bank Dunia.
Sekarang setelah Anda berhasil menyiapkan database, Anda siap melanjutkan ke bagian-bagian berikutnya dari tutorial ini.
Membuat Materialized View
Mari buat materialized view dari kueri berikut -
select country_name,
sum(debt) as total_debt
from international_debt
group by country_name order by country_name;
Kueri mengembalikan nama negara beserta total utangnya (dalam urutan alfabet). Output kueri seharusnya terlihat seperti ini -
Sekarang materialized view-nya -
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;
Anda akan mendapatkan pesan sukses seperti - Query returned successfully: 124 rows affected, 242 ms execution time.
Menyegarkan Materialized View
Anda juga dapat menginstruksikan PostgreSQL untuk tidak memuat data apa pun ke dalam materialized view saat Anda membuatnya dengan menyertakan opsi 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;
Anda akan mendapatkan pesan - Query returned successfully with no result in 41 ms. Perhatikan perbedaan antara kedua pesan output. Jika Anda menambahkan opsi WITH NO DATA, maka materialized view kosong akan dibuat. Anda tidak dapat melakukan kueri pada materialized view ini. Namun, Anda dapat mengisinya dengan mengeksekusi -
REFRESH MATERIALIZED VIEW country_total_debt_2;
Melakukan Kueri pada Materialized View
Sekarang, Anda seharusnya sudah memiliki dua materialized view (country_total_debt, country_total_debt_2) yang dibuat. Mari jalankan kueri select sederhana menggunakan salah satunya -
select * from country_total_debt_2;
Kueri tersebut akan mengembalikan sesuatu seperti -
Outputnya persis sama dengan kueri yang kita bungkus di dalam materialized view. Anda juga dapat menjalankan kueri pada materialized view dengan fungsi agregat -
select max(total_debt) from country_total_debt_2;
Anda akan mendapatkan -
Menghapus Materialized View
Materialized view dapat dihapus sama seperti cara menghapus tabel di PostgreSQL. Anda hanya perlu menyertakan Materialized View setelah Drop -
Drop Materialized View country_total_debt_2;
Untuk membandingkan MySQL dengan pesaing populernya yang kedua, lihat perbandingan mendalam kami PostgreSQL vs. MySQL.
Kesimpulan
Sampai di sini tutorialnya. Terima kasih sudah membaca hingga akhir. Dalam tutorial ini, Anda belajar tentang materialized view di PostgreSQL, dan cara mengoperasikannya. Karena efektivitasnya, materialized view banyak digunakan dalam gudang data. Jika Anda tertarik mempelajari kueri yang lebih kompleks, Anda dapat melihat kursus DataCamp berikut:
Kuasai kueri SQL yang kompleks yang diperlukan untuk menjawab berbagai pertanyaan ilmu data dan menyiapkan set data yang kuat untuk analisis di PostgreSQL.
Kuasai pertanyaan wawancara basis data, dari konsep SQL dasar hingga skenario desain sistem tingkat lanjut. Panduan mendalam ini mencakup semua yang Anda perlukan untuk sukses di wawancara DBMS dan meraih peran berikutnya.
Temukan alasan mengapa Anda sebaiknya (tidak) menggunakan spaghetti plot untuk menyampaikan ketidakpastian jalur prediksi badai serta dampaknya terhadap interpretasi.