Oracle物化视图详解
物化视图(Materialized View)是Oracle数据库中一种特殊的物理表,它存储了查询结果的物理副本,而不是仅仅存储查询的定义。与普通视图不同,普通视图是虚拟表,每次查询时都需要动态执行SQL语句,而物化视图会实际存储查询结果,就像一个物理表一样。
物化视图的主要特点
- 物理存储:物化视图实际存储数据,占用数据库存储空间
- 性能优势:可以显著提高复杂查询的性能,特别是涉及多个表连接或聚合运算的查询3
- 数据同步:可以通过不同方式刷新以保持与基表数据的一致性
- 索引支持:可以像普通表一样创建索引进一步优化查询性能
物化视图的分类
按刷新方式分类
- 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 WITH
和NEXT
:设置刷新计划
物化视图的典型应用场景
- 数据仓库和报表系统:预先计算复杂聚合查询结果
- 分布式数据库环境:在不同数据库间同步数据
- 性能优化:加速频繁执行的复杂查询
- 数据整合:将多个数据源的数据汇总到一个视图中
物化视图刷新示例
-- 手动完全刷新 BEGINDBMS_MVIEW.REFRESH('mv_sales_summary', 'C'); END; -- 手动增量刷新 BEGINDBMS_MVIEW.REFRESH('mv_sales_summary', 'F'); END;
物化视图与普通视图的区别
特性 | 物化视图 | 普通视图 |
---|---|---|
数据存储 | 物理存储数据 | 只存储查询定义 |
查询性能 | 高(直接读取存储结果) | 低(每次执行查询) |
刷新机制 | 需要定期刷新 | 实时反映基表变化 |
存储空间 | 占用存储空间 | 不占用存储空间 |
索引支持 | 支持创建索引 | 不支持索引56 |