Oracle AskTOM 表与视图与物化视图对比

Oracle AskTOM 表与视图与物化视图对比

来源:AskTOM (asktom.oracle.com) 适用版本:Oracle Database 全版本 文档版本:v1.0 / 2026-07-22


1. 概述

表、视图、物化视图是 Oracle 数据库的核心对象,Tom Kyte 在 AskTOM 多次解释[1]。


2. 表(Table)

2.1 特性

- 实际存储数据
- 段(Segment)
- 占用空间
- DML 直接操作

2.2 类型

- 普通表(Heap)
- 分区表
- 临时表
- 索引组织表(IOT)
- 外部表

2.3 使用

CREATE TABLE emp (
  id   NUMBER PRIMARY KEY,
  name VARCHAR2(100),
  salary NUMBER
);

3. 视图(View)

3.1 特性

- 不存储数据
- 存储查询定义
- 逻辑层
- 实时计算

3.2 类型

- 普通视图
- 内联视图
- 对象视图
- 强制视图(FORCE)

3.3 使用

CREATE VIEW emp_dept AS
SELECT e.id, e.name, d.dname 
FROM emp e JOIN dept d ON e.deptno = d.deptno;

3.4 优势

- 简化查询
- 安全(列级)
- 抽象
- 重用

3.5 劣势

- 查询展开
- 性能取决于底层
- 不能加速

4. 物化视图(Materialized View)

4.1 特性

- 实际存储数据
- 段
- 预计算
- 定期刷新

4.2 类型

- ON COMMIT:实时
- ON DEMAND:按需
- COMPLETE:完全刷新
- FAST:增量刷新

4.3 使用

CREATE MATERIALIZED VIEW mv_emp_salary
BUILD IMMEDIATE
REFRESH COMPLETE ON DEMAND
ENABLE QUERY REWRITE
AS
SELECT deptno, SUM(salary) AS total 
FROM emp 
GROUP BY deptno;

4.4 优势

- 性能提升
- 预计算
- Query Rewrite
- 报表加速

4.5 劣势

- 占用空间
- 数据滞后
- 维护成本

5. 对比

对象存储更新性能空间
实际实时直接占用
视图实时取决于底层不占用
物化视图实际按需占用

6. Tom Kyte 观点

6.1 表

- 基础
- 必备
- 实际数据

6.2 视图

- 不要滥用
- 简化查询
- 安全
- 不要嵌套过深

6.3 物化视图

- 报表利器
- Query Rewrite
- 数据滞后评估
- 监控刷新

7. Query Rewrite

7.1 原理

- CBO 自动重写
- 使用物化视图
- 透明加速

7.2 启用

ALTER SYSTEM SET query_rewrite_enabled=true;
ALTER SYSTEM SET query_rewrite_integrity=enforced;

7.3 验证

EXPLAIN PLAN FOR 
SELECT deptno, SUM(salary) FROM emp GROUP BY deptno;
-- 可能使用 mv_emp_salary

8. 刷新策略

8.1 ON COMMIT

- 实时
- 性能影响
- OLTP 慎用

8.2 ON DEMAND

- 按需
- 定时任务
- 报表适用

8.3 FAST

- 增量
- 需要物化视图日志
- 性能好
CREATE MATERIALIZED VIEW LOG ON emp 
WITH PRIMARY KEY, ROWID, SEQUENCE 
INCLUDING NEW VALUES;

9. 选择原则

9.1 表

- 基础数据
- OLTP
- 实时

9.2 视图

- 简化查询
- 安全
- 抽象

9.3 物化视图

- 报表
- 汇总
- 性能加速

10. 性能对比

10.1 查询 100 万行汇总

- 直接查询:10 秒
- 视图:10 秒(相同)
- 物化视图:0.1 秒

10.2 写入

- 表:直接
- 视图:底层表
- 物化视图:刷新成本

11. 常见问题

11.1 视图慢

- 底层查询慢
- 索引
- 优化

11.2 物化视图不刷新

- 检查 JOB
- 检查日志
- 手动刷新

11.3 Query Rewrite 不生效

- 参数
- 完整性
- 统计信息

12. 最佳实践

  1. :基础
  2. 视图:简化、安全
  3. 物化视图:报表、汇总
  4. Query Rewrite:启用
  5. FAST 刷新:增量
  6. 日志:物化视图日志
  7. 监控:刷新
  8. 评估:数据滞后
  9. 测试:性能
  10. 文档:设计

13. 参考资料

[1] AskTOM, “Table vs View vs Materialized View”, https://asktom.oracle.com [2] Oracle Database Data Warehousing Guide 19c, “Materialized Views”