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. 最佳实践
- 表:基础
- 视图:简化、安全
- 物化视图:报表、汇总
- Query Rewrite:启用
- FAST 刷新:增量
- 日志:物化视图日志
- 监控:刷新
- 评估:数据滞后
- 测试:性能
- 文档:设计
13. 参考资料
[1] AskTOM, “Table vs View vs Materialized View”, https://asktom.oracle.com [2] Oracle Database Data Warehousing Guide 19c, “Materialized Views”