Materialized View
Materialized view adalah hasil query yang disimpan secara fisik di disk, bukan dihitung ulang setiap kali dipanggil. Cocok untuk query berat yang hasilnya sering diakses tapi nggak harus selalu real-time.
Apa itu Materialized View?
Materialized view adalah objek database yang menyimpan hasil query secara fisik di disk. Berbeda dari view biasa yang hanya menyimpan definisi query-nya dan tetap menjalankan ulang query setiap kali dipanggil, materialized view menyimpan datanya juga.
Anggap aja materialized view itu kayak laporan yang sudah dicetak: kamu nggak perlu hitung ulang dari nol setiap kali ada yang minta laporannya. Tapi karena sudah dicetak, kamu perlu update atau cetak ulang secara periodik agar datanya tetap akurat.
View Biasa vs Materialized View
| Aspek | View Biasa | Materialized View |
|---|---|---|
| Cara Simpan | Hanya simpan definisi query | Simpan hasil query (data aktual) |
| Kecepatan Query | Lebih lambat (hitung ulang tiap akses) | Jauh lebih cepat (baca dari disk) |
| Kebaruan Data | Selalu real-time | Bisa stale, perlu refresh |
| Penggunaan Storage | Hampir nol | Signifikan tergantung volume data |
| Cocok Untuk | Data yang sering berubah dan butuh real-time | Data agregat yang jarang berubah |
Analogi yang Lebih Nyata
Kamu punya laporan total penjualan per kategori produk. Query-nya butuh join 5 tabel dan agregasi jutaan baris, butuh 30 detik kalau dihitung dari nol setiap kali.
Dengan materialized view, hasil join dan agregasi itu sudah tersimpan. Setiap kali dashboard BI dibuka, datanya langsung tersedia dalam milidetik. Kompromisnya: data ini baru terupdate kalau kamu jalankan perintah REFRESH MATERIALIZED VIEW.
Kapan Pakai Materialized View?
Materialized view cocok kalau:
- Query-nya berat dengan banyak join dan agregasi, tapi sering diakses berulang kali
- Hasil query nggak harus real-time, boleh beberapa jam yang lalu atau data pagi hari
- Kamu butuh performa baca yang tinggi untuk dashboard atau laporan operasional
- Ingin pre-compute kalkulasi kompleks yang sama dipanggil berulang kali
Nggak cocok kalau data harus selalu up-to-date karena bahkan selisih detik pun nggak boleh, atau data berubah sangat sering sehingga biaya refresh lebih besar dari manfaatnya.
Strategi Refresh
Ada dua pendekatan refresh yang umum:
Manual Refresh: Kamu jalankan perintah refresh secara eksplisit atau dijadwalkan lewat cron job atau tool orchestration. Ini yang paling fleksibel.
Incremental Refresh: Beberapa database mendukung refresh incremental, di mana hanya baris yang berubah sejak refresh terakhir yang diperbarui. Jauh lebih efisien untuk dataset besar.
Di PostgreSQL, opsi CONCURRENTLY saat refresh memungkinkan user tetap bisa baca data lama selama proses refresh berjalan, sehingga nggak ada downtime.
Penggunaan di Data Engineering Modern
Di pipeline data modern, materialized view sering jadi alternatif ringan untuk membangun aggregation layer tanpa perlu tabel terpisah dan ETL job tambahan. dbt punya materialization type khusus untuk ini yang bikin pengelolaannya lebih mudah.
Udah paham Materialized View? Lanjut latihan SQL dan Excel yuk!
Latihan interaktif, langsung di browser.