Oracle物化视图详解

物化视图(Materialized View)是Oracle数据库中一种特殊的物理表,它存储了查询结果的物理副本,而不是仅仅存储查询的定义‌。与普通视图不同,普通视图是虚拟表,每次查询时都需要动态执行SQL语句,而物化视图会实际存储查询结果,就像一个物理表一样‌。

物化视图的主要特点

  1. 物理存储‌:物化视图实际存储数据,占用数据库存储空间‌
  2. 性能优势‌:可以显著提高复杂查询的性能,特别是涉及多个表连接或聚合运算的查询‌3
  3. 数据同步‌:可以通过不同方式刷新以保持与基表数据的一致性‌
  4. 索引支持‌:可以像普通表一样创建索引进一步优化查询性能‌

物化视图的分类

按刷新方式分类

  • ON DEMAND‌:需要手动或按计划刷新物化视图‌
  • ON COMMIT‌:基表数据变更提交时自动刷新物化视图‌

按刷新方法分类

  • FAST‌:增量刷新,只刷新自上次刷新后修改的数据‌
  • COMPLETE‌:完全刷新,重新计算整个物化视图‌
  • FORCE‌:Oracle自动选择FAST或COMPLETE方式(默认)‌
  • NEVER‌:不进行任何刷新‌

创建物化视图的基本语法

CREATE MATERIALIZED VIEW [视图名称]

BUILD IM

MEDIATE|DEFERRED REFRESH FAST|COMPLETE|FORCE ON DEMAND|COMMIT

START WITH [开始时间] NEXT [间隔时间] WITH PRIMARY KEY|ROWID

AS [查询语句];

参数说明:

  • BUILD IMMEDIATE:创建时立即生成数据
  • BUILD DEFERRED:创建时不生成数据,后续需要时再生成
  • REFRESH:指定刷新方式(FAST/COMPLETE/FORCE)
  • ON DEMAND|COMMIT:指定刷新触发方式
  • START WITHNEXT:设置刷新计划‌

物化视图的典型应用场景

  1. 数据仓库和报表系统‌:预先计算复杂聚合查询结果‌
  2. 分布式数据库环境‌:在不同数据库间同步数据‌
  3. 性能优化‌:加速频繁执行的复杂查询‌
  4. 数据整合‌:将多个数据源的数据汇总到一个视图中‌

物化视图刷新示例

复制代码
-- 手动完全刷新
BEGIN
 DBMS_MVIEW.REFRESH('mv_sales_summary', 'C');
END;
-- 手动增量刷新
BEGIN
 DBMS_MVIEW.REFRESH('mv_sales_summary', 'F');
END;

物化视图与普通视图的区别

特性 物化视图 普通视图
数据存储 物理存储数据 只存储查询定义
查询性能 高(直接读取存储结果) 低(每次执行查询)
刷新机制 需要定期刷新 实时反映基表变化
存储空间 占用存储空间 不占用存储空间
索引支持 支持创建索引 不支持索引‌56