物化视图:
物化视图是包括一个查询结果的数据库对象,它是远程数据的的本地副本或者用来预先计算并保存表连接或聚集等耗时较多的操作的结果。这样,在执行查询时,就可以避免进行这些耗时的操作,从而快速的得到结果。物化视图有很多方面和索引很相似。使用物化视图的目的是为了提高查询性能;物化视图对应用透明,增加和删除物化视图不会影响应用程序中SQL语句的正确性和有效性;物化视图需要占用存储空间;当基表发生变化时,物化视图也应当刷新。
物化视图特点:
1) 物化视图在某种意义上说就是一个物理表(而且不仅仅是一个物理表),这通过其可以被user_tables查询出来,而得到佐证;
2) 物化视图也是一种段(segment),所以其有自己的物理存储属性;
3) 物化视图会占用数据库磁盘空间,这点从user_segment的查询结果,可以得到佐证;
一、创建物化视图主要语法
CREATE MATERIALIZED VIEW [VIEW_NAME]
{ TABLESPACE TABLESPACE_NAME }
{ BUILD [DEFERRED|IMMEDIATE] }
REFRESH [FAST|COMPLETE|FORCE]
[
ON [COMMIT|DEMAND] |
START WITH (START_TIME) NEXT (NEXT_TIME)
]
AS{创建物化视图用的查询SQL};
(1)REFRESH三种方式:
1)FAST选项
FAST刷新采用增量刷新,只刷新自上次刷新以后进行的修改,如果在子查询中存在分析函数,则物化视图不起作用。使用FAST选项创建物化视图,必须创建基于主表的视图日志。
语法:CREATE MATERIALIZED VIEW LOG ON TABLE_NAME;
2)COMPLETE选项
完全刷新重新生成整个视图,如果请求完全刷新,oracle会完成完全刷新即使增量刷新可用。
3)FORCE选项
当指定FORCE选项,如果增量刷新可用Oracle将完成增量刷新,否则将完成完全刷新,如果不指定刷新方法(FAST,COMPLETE OR FORCE) ,那么FORCE选项是默认选项。
(2)BUILD方式
1)DEFERRED
在创建时不生成数据,以后根据需要在生成数据
2)IMMEDIATE
在创建实体化视图的时候就生成数据
(3)刷新策略
1)ON DEMAND
物化视图在用户需要的时候进行刷新,可以手工通过DBMS_MVIEW.REFRESH等方法来进行刷新,也可以通过JOB定时进行刷新。
2)ON COMMIT
实体化视图在对基表的DML操作提交的同时进行刷新。
(4)刷新间隔
START WITH 第一次刷新的时间 如:sysdate
NEXT 刷新时间间隔 如:sysdate+2/sysdate+1/240等等
(5)WITH选项
1)PRIMARY KEY :
生成主键实体化视图,也就是说实体化视图是基于表的主键,而不是ROWID(对应于ROWID子句)。为了生成PRIMARY KEY子句,应该在表上定义主键,否则应该用基于ROWID的实体化视图。主键实体化视图允许识别实体化视图表而不影响实体化视图增量刷新的可用性。
2)ROWID:
只有一个单一的主表,不能包括下面任何一项: ①Distinct ②聚合函数 ③Group by ④子查询 ⑤ 连接⑥SET操作
二、实践例子
创建物化视图日志
CREATE MATERIALIZED VIEW LOG ON TAB_TEST
TABLESPACE ORACDEV; --日志保存在ORACDEV表空间
创建物化视图主体
CREATE MATERIALIZED VIEW MY_MVIEWS
TABLESPACE oracdev --保存表空间
BUILD DEFERRED --延迟刷新不立即刷新
REFRESH FAST --进行快速刷新,否则完全刷新
ON DEMAND --基于DML
START WITH SYSDATE --第一次刷新时间
NEXT sysdate+1/24*6 --刷新时间间隔
AS SELECT * FROM TAB_TEST;
三、有关物化视图表
(1)DBA_MVIEW_AGGREGATES
代表在聚集实例化视图的SELECT列表中出现的分组函数(聚集方法)。
(2)DBA_MVIEW_ANALYSIS
代表潜在地支持查询重写,并有可用于应用程序分析的附加信息的实例化视图。这种视图包括任何引用远程表或者包括如SYSDATE或USER等非静态值的实例化视图。
(3)DBA_MVIEW_DETAIL_RELATIONS
代表命名细节关系,这些关系或者在一个实例化视图的FROM列表中,或者直接通过FORM列表中的视图引用。在这个表中,没有表示实例化视图中的内嵌视图。
(4)DBA_MVIEW_JOINS
在一个实例化视图的WHERE子句中,代表两个列之间的连接。
(5)DBA_MVIEW_KEYS
代表命名细节关系,这些关系或者在一个实例化视图的FROM列表中,或者直接通过FORM列表中的视图引用。在这个表中,没有表示实例化视图中的内嵌视图。
(6)USER_MVIEWS
自定义的物化视图信息。