Oracle的物化视图
一个视图中有四十多万条数据,查询一条数据需要七八秒时间,而用oracle物化视图解决需要不到一秒时间,效果立竿见影。但是物化视图的缺点确实非常明显的。当然对于数据数量要求不是很严格不要求实时统计的情况下,大数据量查询还是比较不错的选择。相当于本地数据的一份快照(所依赖的表必须有主键!)
create materialized view(view_name) --视图名称
tablespace (tablespace)--表空间
build immediate|deferred(延迟刷新不立即刷新)--创建方式
enable|disable query rewrite--是否支持重写
refresh<force(如果可以快速刷新则进行快速刷新,否则完全刷新)|fast(快速刷新)|complete|never(从不刷新)>
on <commit(只要有提交就刷新)|demand(按照指定方式刷新)>
[with<primary key|rowid|sequence>][including new value][<start with date><next date>---刷新时间]---数据刷新机制,如果需要快速刷新,则需要建立物化视
主键和ROWD子句
WITH PRIMARY KEY选项生成主键物化视图,也就是说物化视图是基于主表的主键,而不是ROWID(对应于ROWID子句). PRIMARY KEY是默认选项,为了生成PRIMARY KEY子句,应该在主表上定义主键,否则应该用基于ROWID的物化视图.
主键物化视图允许识别物化视图主表而不影响物化视图增量刷新的可用性。
Rowid物化视图只有一个单一的主表,不能包括下面任何一项:Distinct 或者聚合函数 Group by,子查询,连接和SET操作
例如:create materialized view v_test refreash fast start with sysdate next sysdate+1/48 隔一段时间自动更新
更新方式:物化建立的时候可以定义刷新方式,一般有: refresh fast 和 refresh complete之分,前者是只更新主表中变化的记录(主表必须建立materialized view log),而后者是把MV里面的数据全部更新。此外,更新方式还可以有:on demand, on commit之分.
on commit是及时更新。ondemand是手动更新。
---创建Oracle物化视图快速刷新日志,以后视图的刷新将采用增量刷新的方式,因此,为配合增量刷新,ORACLE要求要在主表上建立物化视图日志。
create materialized view log on test(表名);
---删除物化视图日志
drop materialized view log on v_name;
---删除物化视图
drop materialized view v_name;