首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

Oracle 物化視圖入門:ON DEMAND 與 ON COMMIT 兩種刷新模式實戰

     編輯:Oracle 資料庫相關知識

一、物化視圖 vs 普通視圖

特性普通視圖物化視圖
存儲虛擬表(僅存 SQL 定義)物理表(佔用段、磁盤空間)
查詢性能每次展開 SQL 執行直接讀取預計算結果
數據一致性實時取決於刷新策略
適用場景簡單查詢、實時性要求高複雜聚合、頻繁查詢、OLAP/報表

二、創建最簡單物化視圖(ON DEMAND 默認)

CREATE MATERIALIZED VIEW mv_testcf AS
SELECT * FROM xiaotg.testcf;

驗證物理屬性

-- 可從 USER_TABLES 查詢,證明是物理表
SELECT table_name, num_rows FROM user_tables WHERE table_name IN ('TESTCF','MV_TESTCF');
-- 結果:MV_TESTCF 80000 行,TESTCF 80000 行

-- 佔用段空間
SELECT segment_name, bytes FROM user_segments WHERE segment_name = 'MV_TESTCF';

三、兩種刷新模式深度對比

維度ON DEMANDON COMMIT
觸發方式手動 DBMS_MVIEW.REFRESH 或排程基表事務 COMMIT 時自動觸發
數據延遲分鐘~天級近實時(毫秒級)
主庫影響極小增加 COMMIT 延遲(需應用刷新)
並發風險無可能導致主表鎖爭用
適用場景報表、數據集市、容忍延遲緩存表、少量 DML 的參考數據

四、刷新方法選擇

  • FAST REFRESH:需物化視圖日志(CREATE MATERIALIZED VIEW LOG ON base_table),僅應用增量變化,極快;
  • COMPLETE REFRESH:截斷重建,無需日志,耗時與全量查詢相當;
  • FORCE REFRESH:嘗試 FAST,失敗則 COMPLETE。

五、手動刷新示例

-- 完全刷新
EXEC DBMS_MVIEW.REFRESH('MV_TESTCF', 'C');

-- 快速刷新(需預建日志)
EXEC DBMS_MVIEW.REFRESH('MV_TESTCF', 'F');

六、進階特性預覽

  • 查詢重寫:QUERY_REWRITE_ENABLED=TRUE,優化器自動將查詢重定向至物化視圖;
  • 分區物化視圖:大數據集分區刷新、分區裁剪;
  • 嵌套物化視圖:多層聚合預計算。

總結

物化視圖以空間換時間,核心決策點:刷新模式(ON DEMAND/ON COMMIT)+ 刷新方法(FAST/COMPLETE)。新手從 ON DEMAND + COMPLETE 起步,逐步引入 MV LOG 實現 FAST REFRESH。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved