物化視圖(Materialized View)本質是一種預計算,即把某些耗時的操作(例如JOIN、AGGREGATE)的結果保存下來,以便在查詢時直接復用,從而避免這些耗時的操作,最終達到加速查詢的目的。本文為您介紹物化視圖相關命令。
使用限制
僅Hologres V1.3及以上版本支持物化視圖,如果您的實例是V1.3以下版本,請您使用自助升級或加入Hologres釘釘交流群反饋,詳情請參見如何獲取更多的在線支持?。
說明
更多使用限制和操作請參見SQL管理物化視圖。
創建物化視圖
命令語法。
創建物化視圖的語法格式如下。
CREATE MATERIALIZED VIEW <mv_name> AS <QUERY BODY>;
mv_name為自定義物化視圖名稱;QUERY BODY為查詢語句,詳情請參見SELECT。
使用示例。
非分區表創建物化視圖。
BEGIN; CREATE TABLE base_sales( day text not null, hour int , ts timestamptz, amount float, pk text not null primary key ); CALL SET_TABLE_PROPERTY('base_sales', 'mutate_type', 'appendonly'); --當實時物化視圖被Drop后,可以取消明細表的appendonly屬性,執行以下命令 --CALL SET_TABLE_PROPERTY('base_sales', 'mutate_type', 'none'); CREATE MATERIALIZED VIEW mv_sales AS SELECT day, hour, avg(amount) AS amount_avg FROM base_sales GROUP BY day, hour; COMMIT; insert into base_sales values(to_char(now(),'YYYYMMDD'),'12',now(),100,'pk1'); insert into base_sales values(to_char(now(),'YYYYMMDD'),'12',now(),200,'pk2'); insert into base_sales values(to_char(now(),'YYYYMMDD'),'12',now(),300,'pk3');
分區表創建物化視圖。
BEGIN; CREATE TABLE base_sales_p( day text not null, hour int, ts timestamptz, amount float, pk text not null, primary key (day, pk) ) partition by list(day); CALL SET_TABLE_PROPERTY('base_sales_p', 'mutate_type', 'appendonly'); --day是分區列,要出現在視圖的group by的條件中 CREATE MATERIALIZED VIEW mv_sales_p AS SELECT day, hour, avg(amount) AS amount_avg FROM base_sales_p GROUP BY day, hour; COMMIT; create table base_sales_20220101 partition of base_sales_p for values in('20220101');
查詢物化視圖
您可以使用如下SQL查看已經創建的物化視圖。
SELECT * FROM mv_sales WHERE day = to_char(now(),'YYYYMMDD') AND hour = 12;
刪除物化視圖
命令語法。
刪除視圖的語法格式如下。
DROP MATERIALIZED VIEW <mv_name>;
mv_name為物化視圖名稱。
使用示例。
DROP MATERIALIZED VIEW mv_sales;
文檔內容是否對您有幫助?