您的位置:首页 > 数据库 > Oracle

Oracle MATERIALIZED VIEW -- 创建物化视图

2010-02-02 23:27 411 查看
物化视图概述

Oracle的物化视图提供了强大的功能,可以用在不同的环境中。在不同的环境中,物化视图的作用也不相同。数据仓库中的物化视图主要用于预先计算并保存表连接或聚集等耗时较多的操作的结果,这样,在执行查询时,就可以避免进行这些耗时的操作,而从快速的得到结果。在数据仓库中,还经常使用查询重写(query rewrite)机制,这样不需要修改原有的查询语句,Oracle会自动选择合适的物化视图进行查询,完全对应用透明。物化视图和表一样可以直接进行查询。物化视图可以基于分区表,物化视图本身也可以分区。除了在数据仓库中使用,物化视图还用于复制、移动计算等方面。物化视图有很多方面和索引很相似:使用物化视图的目的是为了提高查询性能;物化视图对应用透明,增加和删除物化视图不会影响应用程序中SQL语句的正确性和有效性;物化视图需要占用存储空间;当基表发生变化时,物化视图也应当刷新。

创建物化试图主要选项说明
创建物化视图时可以指定多种选项,下面对几种主要的选项进行简单说明:

名称
ON PREBUILD TABLE
描述
将已经存在的表注册为物化视图。同时还必须提供描述创建该表的查询的 SELECT 子句。可能无法始终保证查询的精度与表的精度匹配。为了克服此问题,应该在规范中包含 WITH REDUCED PRECISION 子句。
名称
Build Clause
创建方式
描述
包括BUILD IMMEDIATE和BUILD DEFERRED两种
取值
BUILD IMMEDIATE
在创建物化视图的时候就生成数据
BUILD DEFERRED
在创建时不生成数据,以后根据需要在生成数据
默认
BUILD IMMEDIATE
名称
Refresh
刷新子句
描述
当基表发生了DML操作后,物化视图何时采用哪种方式和基表进行同步
语法
[refresh [fast | complete | force]
[on demand | commit]
[start with date]
[next date]
[with {primary key | rowid}]
]
取值
FAST
采用增量刷新,只刷新自上次刷新以后进行的修改
COMPLETE
对整个物化视图进行完全的刷新
FORCE(默认)
Oracle在刷新时会去判断是否可以进行快速刷新,如果可以则采用Fast方式,否则采用Complete的方式,Force选项是默认选项
ON DEMAND(默认)
物化视图在用户需要的时候进行刷新,可以手工通过DBMS_MVIEW.REFRESH等方法来进行刷新,也可以通过JOB定时进行刷新
ON COMMIT
物化视图在对基表的DML操作提交的同时进行刷新
START WITH
第一次刷新时间
NEXT
刷新时间间隔
WITH PRIMARY KEY(默认)
生成主键物化视图,也就是说物化视图是基于表的主键,而不是ROWID(对应于ROWID子句)。 为了生成PRIMARY KEY子句,应该在表上定义主键,否则应该用基于ROWID的物化视图。主键物化视图允许识别物化视图表而不影响物化视图增量刷新的可用性
WITH ROWID
只有一个单一的主表,不能包括下面任何一项:
●Distinct
●聚合函数
●Group by
●子查询
●连接
●SET操作
名称
Query Rewrite
查询重写
描述
包括ENABLE QUERY REWRITE和DISABLE QUERY REWRITE两种。分别指出创建的物化视图是否支持查询重写。查询重写是指当对物化视图的基表进行查询时,Oracle会自动判断能否通过查询物化视图来得到结果,如果可以,则避免了聚集或连接操作,而直接从已经计算好的物化视图中读取数据
取值
ENABLE QUERY REWRITE
支持查询重写
DISABLE QUERY REWRITE
不支持查询重写
默认
DISABLE QUERY REWRITE
创建实体化试图日志主要选项说明
如果需要进行快速刷新,则需要建立物化视图日志。物化视图日志根据不同物化视图的快速刷新的需要,可以建立为ROWID或PRIMARY KEY类型的。还可以选择是否包括SEQUENCE、INCLUDING NEW VALUES以及指定列的列表。

名称
WITH Clause
描述
取值
OBJECT ID
如果是对象物化视图(object materialized view),则只能采用该方式
PRIMARY KEY
ROWID
SEQUENCE
默认
实体化试图举例
创建物化视图时应先创建存储的日志空间
create materialized view log on table1

tablespace ts_data --日志保存在特定的表空间

with rowid;

然后创建物化视图
create materialized view mv_table1

on prebuild table --将物化视图建立在一个已经存在的表上

tablespace ts_data --保存表空间

build deferred --延迟刷新不立即刷新

refresh force --如果可以快速刷新则进行快速刷新,否则完全刷新

on demand --按照指定方式刷新

as select * from table1;

删除物化视图日志
drop materialized view log on table1;

删除物化视图
drop materialized view mv_table1;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: