All Products
Search
Document Center

PolarDB:Percepat kueri dengan tampilan yang di-materialisasi

Last Updated:Dec 06, 2025

Tampilan yang di-materialisasi adalah objek basis data yang mengoptimalkan performa kueri kompleks dengan memprakalkulasi dan menyimpan hasil kueri, sehingga Anda dapat langsung melakukan kueri terhadap data yang telah diprakalkulasi tanpa menjalankan ulang operasi intensif sumber daya tersebut. Pendekatan ini menukar ruang penyimpanan dengan waktu guna mempercepat kueri.

Kluster PolarDB for MySQL kini mendukung pembaruan penuh tampilan yang di-materialisasi, baik secara terjadwal maupun manual. Tampilan yang di-materialisasi menggunakan tugas latar belakang untuk memperbarui data dan dapat digunakan bersama In-Memory Column Index (IMCI) guna mempercepat kueri. Hal ini meningkatkan efisiensi pembaruan serta mengurangi beban pada node read-only, sekaligus memperkuat kemampuan pemrosesan analitik (AP) dalam arsitektur pemrosesan transaksional dan analitik hibrida (HTAP) PolarDB.image.png

Perbedaan utama antara tampilan yang di-materialisasi dan tampilan biasa terletak pada fakta bahwa tampilan yang di-materialisasi menyimpan salinan fisik data, sehingga memungkinkan kueri langsung terhadapnya. Tampilan yang di-materialisasi terdiri atas tampilan itu sendiri dan tabel dasar fisik yang mendasarinya.

  • Buat tampilan yang di-materialisasi: Pembuatan tabel dan materialisasi merupakan dua langkah terpisah. Materialisasi adalah operasi asinkron yang dijalankan sebagai tugas latar belakang untuk membuat tabel dasar fisik. Nama tabel dasar fisik tersebut kemudian dikaitkan dengan tampilan. Bagian kueri dari tugas pembaruan dapat dialihkan ke node read-only IMCI, sehingga mempercepat kueri dan mengurangi dampak pada node primary.

  • Lakukan kueri terhadap tampilan yang di-materialisasi: Kueri dilakukan dengan menggabungkan tampilan dan tabel dasar fisik untuk mengakses data dalam tabel dasar fisik tersebut.

  • Perbarui tampilan yang di-materialisasi: Pembaruan penuh membuat tabel dasar fisik tersembunyi baru. Setelah pernyataan pembaruan dieksekusi pada tabel dasar tersembunyi tersebut, tabel dasar asli dan tersembunyi ditukar. Proses ini memperbarui tabel metadata dengan informasi tabel dasar fisik terbaru dan menyelaraskannya dengan struktur dalam memori untuk kueri.

  • Pantau dan kelola tugas: Anda dapat melakukan kueri terhadap informasi antrian tugas pembaruan latar belakang dan mengelola tugas-tugas tersebut, termasuk menangguhkan atau me-restart tugas pembaruan terjadwal untuk tabel tertentu, basis data, atau secara global.

Penerapan

Kluster PolarDB for MySQL Anda harus memenuhi salah satu persyaratan berikut:

  • Kluster menjalankan MySQL 8.0.1, dan versi mesin minor adalah 8.0.1.1.51 atau lebih baru.

  • Kluster menjalankan MySQL 8.0.2, dan versi mesin minor adalah 8.0.2.2.31 atau lebih baru.

Keunggulan

  • Menghindari perhitungan berulang: Untuk kueri kompleks yang intensif sumber daya, Anda cukup melakukan perhitungan sekali dan menggunakan ulang hasilnya berkali-kali, sehingga efisiensi kueri meningkat signifikan.

  • Pragregasi data: Anda dapat melakukan pra-agregasi data untuk laporan, seperti laporan harian, mingguan, dan bulanan, sehingga mempercepat pembuatan laporan dan analitik data.

  • Mengoptimalkan kueri data besar: Tampilan yang di-materialisasi mengurangi pemindaian langsung terhadap volume besar data mentah, sehingga mempercepat waktu respons untuk kueri analitik.

  • Mendukung analisis multidimensi: Tampilan yang di-materialisasi dapat memprakalkulasi data agregat untuk berbagai kombinasi dimensi, memberikan dukungan efisien untuk Pemrosesan Analitik Online (OLAP) dan skenario analisis multidimensi lainnya.

Skenario

Tampilan yang di-materialisasi mengoptimalkan performa kueri dengan memprakalkulasi dan menyimpan hasil kueri. Fitur ini sangat berguna dalam skenario yang melibatkan data skala besar dan kueri kompleks karena mengurangi overhead komputasi real-time serta menyederhanakan logika kueri. Tampilan yang di-materialisasi banyak digunakan untuk pembuatan laporan cepat dan analitik data.

  • Menghindari perhitungan berulang: Tampilan yang di-materialisasi cocok untuk menyimpan hasil perhitungan kompleks dan intensif sumber daya yang sering dikueri, sehingga menghindari penghitungan ulang data yang sama dan meningkatkan efisiensi kueri secara signifikan.

  • Pragregasi data: Dalam skenario seperti pembuatan laporan dan analitik data, tampilan yang di-materialisasi dapat melakukan pra-agregasi data, seperti data penjualan harian, mingguan, atau bulanan serta data perilaku pengguna. Hasil perhitungan yang telah disimpan mengurangi waktu dan sumber daya yang dibutuhkan untuk komputasi real-time.

  • Mengoptimalkan kueri data besar: Ketika skenario bisnis Anda melibatkan analisis volume data besar, kueri langsung terhadap data mentah dapat memakan waktu akibat pemindaian besar-besaran. Tampilan yang di-materialisasi mengurangi kebutuhan akses langsung ke data mentah, sehingga mempercepat kueri dan analisis.

  • Mendukung analisis multidimensi: Tampilan yang di-materialisasi dapat memprakalkulasi data agregat untuk berbagai kombinasi dimensi, memberikan respons kueri yang efisien dan cepat dalam skenario analisis data multidimensi.

Deskripsi metrik

Metode untuk mengubah parameter kluster PolarDB berbeda antara Konsol dan sesi database, sebagai berikut:

  • Di PolarDB console

    • Kompatibilitas: Untuk kompatibilitas dengan file konfigurasi MySQL, beberapa parameter kluster di Konsol PolarDB memiliki awalan loose_.

    • Prosedur: Temukan dan ubah parameter yang memiliki awalan loose_.

  • Di sesi database (menggunakan command line atau client)

    • Prosedur: Saat menggunakan perintah SET untuk mengubah parameter dalam sesi database, hapus awalan loose_ dan gunakan nama parameter aslinya.

Parameter

Deskripsi

loose_materialized_view_enabled

Mengaktifkan atau menonaktifkan tampilan yang di-materialisasi. Nilai yang valid:

  • ON (default): Mengaktifkan fitur.

  • OFF: Menonaktifkan fitur.

loose_enable_materialized_view_parallel

Menentukan apakah akan mengaktifkan kueri paralel untuk tampilan yang di-materialisasi. Nilai yang valid:

  • ON: Mengaktifkan fitur.

  • OFF (default): Menonaktifkan fitur.

Buat tampilan yang di-materialisasi

Sintaksis

CREATE
  MATERIALIZED VIEW view_name [(column_list)]
  [REFRESH [COMPLETE|FAST]]
  [ON [COMMIT|DEMAND]]
  [START WITH now()] [NEXT now() + interval 1 hour]
  [[DISABLE|ENABLE] QUERY REWRITE]
  AS select_statement

Izin

  • Izin CREATE pada basis data tempat tampilan yang di-materialisasi akan ditempatkan.

  • Izin SELECT pada kolom terkait atau seluruh tabel dari semua tabel dasar untuk tampilan yang di-materialisasi.

Parameter

Parameter

Wajib

Deskripsi

view_name

Ya

Nama tampilan yang di-materialisasi.

column_list

Tidak

Kolom yang ditentukan untuk tampilan yang di-materialisasi. Jika Anda ingin memberikan nama spesifik untuk kolom dalam tampilan, Anda dapat menentukan nama kolom dalam column_list, dipisahkan koma (,).

REFRESH

Tidak

Menentukan kebijakan pembaruan untuk tampilan yang di-materialisasi.

  • COMPLETE (default): Pembaruan penuh.

  • FAST: Pembaruan bertahap.

Catatan

Saat ini, hanya kebijakan pembaruan penuh yang didukung.

ON

Tidak

Menentukan jenis materialisasi tampilan yang di-materialisasi.

  • COMMIT: Materialisasi real-time.

  • DEMAND (default): Materialisasi asinkron.

Catatan

Saat ini, hanya jenis materialisasi asinkron yang didukung.

START WITH

Tidak

Waktu mulai untuk pembaruan otomatis dari tampilan yang di-materialisasi secara asinkron.

NEXT

Tidak

Interval pembaruan untuk tampilan yang di-materialisasi secara asinkron.

Catatan

Jika NEXT tidak didefinisikan, Anda hanya dapat memperbarui tampilan secara manual.

QUERY REWRITE

Tidak

Menentukan apakah tampilan yang di-materialisasi mendukung penulisan ulang kueri.

  • DISABLE (default): Tidak didukung.

  • ENABLE: Didukung.

Catatan

Saat ini, penulisan ulang kueri tidak didukung.

select_statement

Ya

Pernyataan kueri yang mendefinisikan data untuk tampilan yang di-materialisasi. Pernyataan ini mengambil data dari tabel dasar dan menyimpan hasilnya dalam tampilan yang di-materialisasi.

Contoh

  1. Buat tabel table1 dan table2 sebagai tabel dasar untuk tampilan yang di-materialisasi.

    -- Buat tabel dasar
    CREATE TABLE table1 (col1 INT PRIMARY KEY, col2 VARCHAR(20), col3 INT);
    CREATE TABLE table2 (col1 INT PRIMARY KEY, col2 VARCHAR(20), col3 INT);
    
    -- Masukkan data ke tabel dasar
    INSERT INTO table1 VALUES (1, 'A', 100), (2, 'B', 200), (3, 'C', 300), (4, 'D', 400);
    INSERT INTO table2 VALUES (1, 'X', 10), (2, 'Y', 20), (3, 'Z', 30), (5, 'W', 50);
  2. Buat tampilan yang di-materialisasi.

    CREATE MATERIALIZED VIEW mv1 
    REFRESH COMPLETE 
    ON DEMAND 
    START WITH now() NEXT now() + INTERVAL 1 hour 
    AS 
    SELECT 
        SUM(t1.col3) AS sum_value, 
        AVG(t1.col3) AS avg_value 
    FROM table1 t1 
    JOIN table2 t2 ON t1.col1 = t2.col1;

Mengkueri Tampilan yang di-materialisasi

Catatan

Untuk melakukan kueri terhadap tampilan yang di-materialisasi, Anda harus memiliki izin SELECT pada tampilan tersebut. Anda tidak memerlukan izin SELECT pada tabel dasar yang dirujuk oleh tampilan yang di-materialisasi.

Lakukan kueri terhadap tampilan yang di-materialisasi

SELECT * FROM mv1;

Hasil yang diharapkan:

+-----------+-----------+
| sum_value | avg_value |
+-----------+-----------+
|       600 |  200.0000 |
+-----------+-----------+

Lihat definisi tampilan yang di-materialisasi

SHOW CREATE VIEW mv1;

Hasil yang diharapkan:

+------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------------------+----------------------+
| View | Create View                                                                                                                                                                                                                                                                    | character_set_client | collation_connection |
+------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------------------+----------------------+
| mv1  | CREATE MATERIALIZED VIEW `mv1` REFRESH COMPLETE ON DEMAND START WITH ('2025-10-15 11:20:15') NEXT (now() + interval 1 hour)  AS select sum(`t1`.`col3`) AS `sum_value`,avg(`t1`.`col3`) AS `avg_value` from (`table1` `t1` join `table2` `t2` on((`t1`.`col1` = `t2`.`col1`))) | utf8mb4              | utf8mb4_0900_ai_ci   |
+------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------------------+----------------------+

Gunakan tabel sistem untuk melakukan kueri informasi tampilan yang di-materialisasi

SELECT * FROM mysql.view_materialized_info;

Deskripsi Bidang

Bidang

Deskripsi

TABLE_SCHEMA

Nama basis data tempat tampilan yang di-materialisasi berada.

TABLE_NAME

Nama tampilan yang di-materialisasi.

IS_DROPPED

Menunjukkan apakah tampilan telah dihapus.

  • 0: Tidak.

  • 1: Ya.

FIRST_REFRESH_TIME

Jika pembaruan otomatis dikonfigurasi, ini adalah waktu pembaruan pertama.

TIME_ZONE

Pengaturan zona waktu.

REFRESH_CONDITION

Mekanisme pemicu pembaruan.

  • DEMAND: Pembaruan asinkron. Pembaruan dipicu secara otomatis pada waktu terjadwal atau secara manual.

  • COMMIT: Pembaruan real-time.

REFRESH_STRATEGY

Kebijakan pembaruan untuk tampilan yang di-materialisasi.

  • COMPLETE: Pembaruan penuh.

  • FAST: Pembaruan bertahap.

REFRESH_START_TIME

Waktu saat pembaruan dimulai.

NEXT_TIME_EXPRESSION

Definisi waktu pembaruan berikutnya untuk tampilan yang di-materialisasi asinkron.

LAST_START_TIME

Waktu ketika pembaruan terakhir benar-benar dimulai.

LAST_END_TIME

Waktu ketika pembaruan terakhir benar-benar berakhir.

CONTAINER_TABLE_POSTFIX

Akhiran tabel fisik untuk penyimpanan data.

EXPIRED_TABLE_POSTFIX

Akhiran tabel fisik kedaluwarsa berikutnya untuk penyimpanan data.

IS_STOPPED

Menunjukkan apakah pembaruan terjadwal dihentikan.

  • 0: Tidak.

  • 1: Ya.

CREATE_TIME

Waktu saat metadata tampilan yang di-materialisasi dibuat.

UPDATE_TIME

Waktu saat metadata tampilan yang di-materialisasi diperbarui.

Hasil yang diharapkan:

+-----+--------------+------------+------------+---------------------+-----------+-------------------+------------------+---------------------+---------------------------+---------------------+---------------------+-------------------------+-----------------------+------------+---------------------+---------------------+
| id  | table_schema | table_name | is_dropped | first_refresh_time  | time_zone | refresh_condition | refresh_strategy | refresh_start_time  | next_time_expression      | last_start_time     | last_end_time       | container_table_postfix | expired_table_postfix | is_stopped | create_time         | update_time         |
+-----+--------------+------------+------------+---------------------+-----------+-------------------+------------------+---------------------+---------------------------+---------------------+---------------------+-------------------------+-----------------------+------------+---------------------+---------------------+
| 471 | testmv       | mv1        |          0 | 2025-10-15 11:20:16 | +08:00    | DEMAND            | COMPLETE         | 2025-10-15 11:20:15 | (now() + interval 1 hour) | 2025-10-15 11:20:15 | 2025-10-15 11:20:16 |           2022929596417 |         2022929596417 |          0 | 2025-10-15 11:20:16 | 2025-10-15 11:20:16 |
+-----+--------------+------------+------------+---------------------+-----------+-------------------+------------------+---------------------+---------------------------+---------------------+---------------------+-------------------------+-----------------------+------------+---------------------+---------------------+

Perbarui tampilan yang di-materialisasi

Saat ini, tampilan yang di-materialisasi hanya mendukung pembaruan penuh. Proses ini menggunakan metode out-of-place, di mana tabel dasar fisik tersembunyi dibuat, pernyataan pembaruan dieksekusi padanya, lalu tabel dasar asli dan tersembunyi ditukar. Oleh karena itu, operasi pembaruan penuh memerlukan ruang penyimpanan tambahan. Keunggulan utama metode ini adalah mendukung kueri SQL apa pun.

Tampilan yang di-materialisasi mendukung dua metode pembaruan: pembaruan manual dan pembaruan terjadwal.

Pembaruan Manual

Jika tampilan yang di-materialisasi tidak dikonfigurasi untuk pembaruan terjadwal, atau jika interval pembaruan panjang, Anda dapat menggunakan perintah REFRESH MATERIALIZED VIEW untuk memperbarui data secara manual.

REFRESH MATERIALIZED VIEW <view_name>;

Contoh

  1. Masukkan data uji baru.

    INSERT INTO table1 VALUES (5, 'E', 500), (6, 'F', 600);
    INSERT INTO table2 VALUES (7, 'U', 60), (8, 'V', 70);
  2. Perbarui tampilan yang di-materialisasi secara manual.

    REFRESH MATERIALIZED VIEW mv1;
  3. Tanyai tampilan yang di-materialisasi.

    SELECT * FROM mv1;

    Hasil yang diharapkan:

    +-----------+-----------+
    | sum_value | avg_value |
    +-----------+-----------+
    |      1100 |  275.0000 |
    +-----------+-----------+

Pembaruan Terjadwal

Saat membuat tampilan yang di-materialisasi, Anda dapat menetapkan waktu mulai pembaruan terjadwal dengan START WITH dan mengonfigurasi interval pembaruan otomatis dengan NEXT. Sistem secara otomatis menjadwalkan pembaruan berdasarkan waktu yang dikonfigurasi.

CREATE MATERIALIZED VIEW mv1 
REFRESH COMPLETE 
ON DEMAND 
START WITH now() NEXT now() + INTERVAL 1 hour 
AS 
SELECT 
    SUM(t1.col3) AS sum_value, 
    AVG(t1.col3) AS avg_value 
FROM table1 t1 
JOIN table2 t2 ON t1.col1 = t2.col1;

Hapus tampilan yang di-materialisasi

Catatan

Untuk menghapus tampilan yang di-materialisasi, Anda harus memiliki izin DROP pada basis data tempat tampilan tersebut berada.

Sintaksis

DROP MATERIALIZED VIEW <view_name>;

Contoh

DROP MATERIALIZED VIEW mv1;

Pantau dan kelola tugas pembaruan terjadwal

Pembaruan terjadwal tampilan yang di-materialisasi bergantung pada mekanisme penjadwalan otomatis sistem. Jika terdapat terlalu banyak tugas terjadwal, Anda dapat memantau dan mengelolanya dengan menangguhkan atau me-restart tugas pembaruan terjadwal untuk tampilan yang di-materialisasi pada tingkat tabel, basis data, atau global.

Lihat antrian tugas

Anda dapat menggunakan tampilan sistem information_schema.materialized_view_refresh_queue untuk melakukan kueri informasi antrian pembaruan.

SELECT * FROM information_schema.materialized_view_refresh_queue;

Jeda antrian tugas

Berdasarkan tabel

STOP MATERIALIZED VIEW task FOR TABLE mv1;

Berdasarkan database

STOP MATERIALIZED VIEW task FOR DATABASE mv1;

Secara global

STOP MATERIALIZED VIEW task FOR ALL;

Mulai ulang antrian tugas

Berdasarkan tabel

RESTART MATERIALIZED VIEW task FOR TABLE mv1;

Berdasarkan database

RESTART MATERIALIZED VIEW task FOR DATABASE mv1;

Secara global

RESTART MATERIALIZED VIEW task FOR ALL;