物化視圖 (Materialized View, MV) 預先計算並儲存表聯結、聚合等耗時操作結果,查詢時直接讀取預計算結果,大幅縮短回應時間。與索引極度相似:
| 類型 | 特徵 | 典型場景 |
|---|---|---|
| 聚合物化視圖 | 含 GROUP BY、SUM/COUNT/AVG 等 | 銷售彙總、庫存快照、KPI 儀表板 |
| 聯結物化視圖 | 多表 JOIN 預計算 | 星型模型事實表+維度表、報表聯結 |
| 嵌套物化視圖 | 基於其他 MV 建立 | 多層彙總(日→月→年)、資料市集分層 |
快速刷新限制條件三類差異大,其他特性相近。
需設定 QUERY_REWRITE_INTEGRITY = TRUSTED | STALE_TOLERATED 且 QUERY_REWRITE_ENABLED = TRUE。
| 維度 | 選項 | 說明 |
|---|---|---|
| 觸發時機 | ON DEMAND | 手動/排程觸發 (DBMS_MVIEW.REFRESH / Job) |
| ON COMMIT | 基表 DML 提交時同步刷新,影響交易延遲 | |
| 刷新方法 | FAST | 增量刷新,需 MV Log 記錄變更,最快但限制多 |
| COMPLETE | 全量重建,無限制但耗時長 | |
| FORCE | 嘗試 FAST,失敗轉 COMPLETE(預設) | |
| NEVER | 不刷新,僅作靜態快照 |
預設:FORCE ON DEMAND
-- 基本建立
CREATE MATERIALIZED VIEW LOG ON base_table
TABLESPACE mv_log_ts
WITH ROWID; -- 或 PRIMARY KEY
-- 進階:支援聯結/聚合快速刷新
CREATE MATERIALIZED VIEW LOG ON base_table
TABLESPACE mv_log_ts
WITH ROWID, SEQUENCE (col1, col2) INCLUDING NEW VALUES;
ROWID:行遷移場景適用PRIMARY KEY:主鍵穩定場景優先SEQUENCE:記錄操作順序,支援混合 DMLINCLUDING NEW VALUES:記錄新值,支援聚合快速刷新DROP MV 不刪除基表,需 QUERY_REWRITE_INTEGRITY = TRUSTED-- 1. 建立 MV Log 指定表空間
CREATE MATERIALIZED VIEW LOG ON mv_lvy_levytaxbgtdiv
TABLESPACE ZGMV_DATA
WITH ROWID;
CREATE MATERIALIZED VIEW LOG ON tb_lvy_levydetaildata
TABLESPACE ZGMV_DATA
WITH ROWID, SEQUENCE (LEVYDETAILDATAID);
CREATE MATERIALIZED VIEW LOG ON tb_lvy_levydata
TABLESPACE ZGMV_DATA
WITH ROWID;
-- 2. 建立 MV 指定表空間與儲存參數
CREATE MATERIALIZED VIEW mv_sales_summary
TABLESPACE ZGMV_DATA
BUILD IMMEDIATE
REFRESH FAST ON DEMAND
ENABLE QUERY REWRITE
AS
SELECT ...
FROM ...;
BEGIN
DBMS_SCHEDULER.CREATE_JOB (
job_name => 'REFRESH_MV_SALES_DAILY',
job_type => 'PLSQL_BLOCK',
job_action => 'BEGIN DBMS_MVIEW.REFRESH(''MV_SALES_SUMMARY'', ''F''); END;',
start_date => SYSTIMESTAMP,
repeat_interval => 'FREQ=DAILY; BYHOUR=2; BYMINUTE=0',
enabled => TRUE,
comments => 'Daily fast refresh sales summary MV'
);
END;
/
DBA_MVIEWS / USER_MVIEWS:MV 狀態、最後刷新時間、失效標記DBA_MVIEW_LOGS:MV Log 大小、清理狀態DBA_MVIEW_REFRESH_TIMES:刷新歷史與耗時物化視圖是資料倉庫與報表系統的「加速齒輪」。精準選型(聚合/聯結/嵌套)、科學刷新(FAST/ON DEMAND + MV Log)、善用查詢重寫與分區 PCT,即可在儲存成本與查詢效能間找到最佳平衡點。