Oracle 物化视图
1.物化视图的概念
视图(view)是一种虚表,其目的仅仅是为了方便我们进行综合数据的查询而已,它并不能帮助我们提高查询的性能。
而物化视图比较特殊,它一种特殊的物理表,其物化(materialized)是相对普通视图而言的。
物化视图主要有以下几个特点:
- 物化视图某种意义上来说就是一个物理表,可以通过user_tables进行查询。
- 物化视图也是一种段(segment),有自己的物理属性
- 物化视图会占用数据库磁盘空间
2.物化视图的类型
针对对于物化视图数据的更新方式,可将物化视图分为手工刷新(ON DEMAND)和自动刷新(ON COMMIT)*两类,
-
手动刷新
手动刷新,即需要物化视图进行刷新时,才对物化视图进行刷新,将其与基表数据保持一致,这是创建物化视图时的默认选项。 -
自动刷新
自动刷新,会在基表数据变更,即commit后,会立即更新物化视图,保持与基表数据的一致性。
3.物化视图的语法
3.1.创建
- 基本语法
CREATE MATERIALIZED VIEW 视图名称 [可选参数项] AS SELECT * FROM 基表名;
- 可选参数项
-
BULID [IMMEDIATE,DEFERED]
- BULID IMMEDIATE:创建视图时立即生成数据,默认参数。
- BULID DEFERED:创建视图时现不生成数据,先创建逻辑,待下次更新时生成数据。
-
REFERSH [FAST,COMPLETE,FORCE,NEVER]
- REFERSH FAST:快速刷新,即增量更新。
- REFERSH COMPLETE:全表刷新。
- REFERSH FORCE:在增量更新可用的情况下会选择增量更新,不可用的情况下进行全表刷新。
- REFERSH NEVER:不刷新数据。
-
ON [DEMAND,COMMIT]
- ON DEMAND:手工刷新,默认参数。
- ON COMMIT:自动刷新。
-
START WITH
通知数据库完成从基表到本地表第一次复制的时间。 -
NEXT
设定时间的刷新间隔, 下次刷新时间 = 上次执行完成时间 + 时间间隔
-
3.2.删除
-
DROP MATERIALIZED VIEW 视图名称;
4.物化视图的实例
-
实例1:自动刷新
CREATE MATERIALIZED VIEW MV_DEMO1 REFERSH FORCE ON COMMIT AS SELECT * FROM TABLE_A;
-
实例2:手动刷新
CREATE MATERIALIZED VIEW MV_DEMO1 REFERSH FORCE ON DEMAND START WITH SYSDATE NEXT SYSDATE + 1 AS SELECT * FROM TABLE_A;
-
实例3:增量刷新
CREATE MATERIALIZED VIEW LOG ON TABLE_A WITH ROWID; CREATE MATERIALIZED VIEW MV_DEMO1 REFERSH FAST ON DEMAND START WITH SYSDATE NEXT SYSDATE + 1/1440 AS SELECT * FROM TABLE_A;