`
orange5458
  • 浏览: 347336 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

ORACLE 物化视图

 
阅读更多

1.简介

       物化视图是一种特殊的物理表,“物化”(Materialized)视图是相对普通视图而言的。普通视图是虚拟表,应用的局限性大,任何对视图的查询,Oracle都实际上转换为视图SQL语句的查询。这样对整体查询性能的提高,并没有实质上的好处。

       物化视图有很多方面和索引很相似:使用物化视图的目的是为了提高查询性能;物化视图对应用透明,增加和删除物化视图不会影响应用程序中SQL 语句的正确性和有效性;物化视图需要占用存储空间;当基表发生变化时,物化视图也应当刷新。

       物化视图有三种:聚集物化视图、包含连接物化视图、嵌套物化视图。但三种物化视图的快速刷新的限制条件有很大区别,而其他方面则区别不大。

2.使用

1)创建

create materialized view materialized_view_name

build [immediate|deferred]

refresh [complete|fast|force|never]

on [commit|demand]

start with (start_date)  

next (interval_date)

with [primary key|rowid]

[ENABLE|DISABLE] QUERY REWRITE

as     

select statement;

1.1)创建方式 build [immediate|deferred]

BUILD IMMEDIATE是在创建物化视图的时候就生成数据,而BUILD DEFERRED则在创建时不生成数据,以后根据需要在生成数据。默认为BUILD IMMEDIATE。

1.2)刷新方式 refresh [complete|fast|force|never]

FAST刷新采用增量刷新,只刷新自上次刷新以后进行的修改。COMPLETE刷新对整个物化视图进行完全的刷新。如果选择FORCE方式,则Oracle在刷新时会去判断是否可以进行快速刷新,如果可以则采用FAST方式,否则采用COMPLETE的方式。NEVER指物化视图不进行任何刷新。默认为FORCE。

1.3)刷新模式 on [commit|demand]

ON DEMAND指物化视图在用户需要的时候进行刷新,可以手工刷新,也可以通过JOB定时进行刷新。ON COMMIT指出物化视图在对基表的DML操作提交的同时进行刷新。

手动刷新方式:

 

SQL>execute dbms_mview.refresh('EMP_BY_DISTRICT');  --刷新指定的物化视图

SQL>execute dbms_mview.refresh_defresh_dependent('EMPLOYEE');  ――刷新利用了该表的所有物化视图

SQL>execute dbms_mview.refresh_all_mviews;   ――刷新该模式中,自上次刷新以来,未得到刷新的所有物化视图。

1.4)start with (start_date) next (interval_date)

通知数据库完成从主表到本地表第一次复制的时间,应该及时估计下一次运行的时间点,因此它是和next成组出现。

如:start with sysdate next sysdate+2 每两天刷新一次

1.5)物化视图日志 with [primary key|rowid]

如果需要进行快速(FAST)刷新,则需要建立物化视图日志。物化视图日志根据不同物化视图的快速刷新的需要,可以建立为ROWID或PRIMARY KEY类型的。还可以选择是否包括SEQUENCE、INCLUDING NEW VALUES以及指定列的列表。

WITH PRIMARY KEY(默认),生成主键物化视图,也就是说物化视图是基于表的主键,而不是ROWID(对应于ROWID子句)。 为了生成PRIMARY KEY子句,应该在表上定义主键,否则应该用基于ROWID的物化视图。主键物化视图允许识别物化视图表而不影响物化视图增量刷新的可用性。

WITH ROWID,只有一个单一的主表,不能包括下面任何一项,Distinct,聚合函数,Group by,子查询,连接,SET操作。

1.6)[ENABLE|DISABLE] QUERY REWRITE

分别指出创建的物化视图是否支持查询重写。查询重写是指当对物化视图的基表进行查询时,Oracle会自动判断能否通过查询物化视图来得到结果,如果可以,则避免了聚集或连接操作,而直接从已经计算好的物化视图中读取数据。

2)删除物化视图日志

drop materialized view log on materialized_view_name; 

3)删除物化视图

drop materialized view materialized_view_name; 

3.参考资料

http://blog.sina.com.cn/s/blog_6ceed3280100xcdv.html

http://www.itpub.net/thread-1614812-1-1.html

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics