how to create oracle materialized view ,and its notes

CREATE MATERIALIZED VIEW mv_newlines
BUILD DEFERRED
/*1、创建后不会立即执行query,不会立即刷新mv,而是等待下次refresh时才会执行query
2、如果不指定此参数,默认是build immediate,即立即执行query,立即刷新mv*/
 
USING NO INDEX
/*1、不允许创建默认index。
2、如果不指定,则默认是using index,可以显示调用using index来设置index的initrans和STORAGE参数*/
 
REFRESH 
/*1、如果fast、complete和force都未指定,则默认是refresh force。
2、在1的基础上,如果on commit和on demand都未指定,则默认是refresh force on demand*/
 
--FAST
/*1、快速刷新或增量刷新,需要先创建mv log。*/ 
COMPLETE
/*1、完全刷新,创建mv时会立即执行query
2、如果是build deferred+complete+on demand,则忽略参数build deferred
如果是build deferred+complete+on commit,则不会立即执行query*/ 

--FORCE
/*1、force的意思是先尝试fast,如果失败则尝试complete*/ 

--ON COMMIT
/*1、当主表被commit时,会触发mv刷新,只有刷新完成,commit才会结束,所以对性能有影响
2、mv只有在第一次complete刷新之后才能生效。意思就是:如果是build deferred+on commit,那么
创建mv后,mv的status是37(fast/force)/38(complete),即无法自动刷新,再怎么commit主表,mv数据也不会丝毫改动。
此时,必须手工执行EXEC Dbms_Mview.refresh('MV_NEWLINES',method=>'COMPLETE');完成一次complete刷新,mv才能生效
status变为3(fast/force)/2(complete)
3、所以需要使用on commit时,最好不指定build参数
4、query中不能包含remote表
5、与start with和next有冲突*/ 

ON DEMAND
/*1、不指定此参数,默认也是它
2、如果没有指定start with或next参数,则需要手工刷新mv*/ 

START WITH to_date('20110930 14:12:00','yyyymmdd hh24:mi:ss')
/*1、指定第一次刷新时间,
2、如果指定了过去的时间,并且是complete方式,则会根据sysdate和next参数重新计算新的时间*/ 

NEXT SYSDATE + 1/24/60
/*指定自动刷新时间间隔。注意,这里不能使用'--'做注释,否则报next无效*/ 
WITH ROWID
/*1、如果mv的query不选择主表的所有pk列,则必须使用此种方式。
2、主表只能有1个,并且query不能有1)distinct或aggregate;2)group by或connect by;3)subquery;4)joins;5)set
3、默认是with primary key,这种方式下,1)主表必须有enable的pk;2)mv的query必须直接select所有的pk,即不能对pk列加function*/ 

--FOR UPDATE
ENABLE QUERY REWRITE
/*1、如果不指定此参数,默认是disable query rewrite
2、mv中所含的function必须是DETERMINISTIC的
3、mv中所含的expression必须是repeatable
4、必须执行dbms_stats收集mv的性能数据*/ 

AS
/*下面指定mv的query,最大长度64K
--1、如果query是基于另外一个mv,则不能enable query rewrite
--2、query的select中不能包含subquery,但where后面可以包含subquery
--3、query不能含有long字段
--4、不能为temporary table创建mv log,因为fast模式不适用于temp table
--5、如果from中引用了另外一个mv,则必须先刷新引用的mv,才能成功创建当前mv*/ 

SELECT attribute15
FROM Gl_Sets_Of_Books

posted @ 2011-11-04 16:17  hello_olduncle  阅读(255)  评论(0编辑  收藏  举报