物化视图

2015/02/10 Oracle

物化视图

物化视图概念

我们都知道视图(VIEW)是一种虚表,其目的仅仅是为了方便我们进行综合数据的查询而已,并不能够帮助我们提高性能。
那么物化视图,这个概念的引出,我们在相应场景可以使用物化视图提高查询效率。
物化视图是一种特殊的物理表,“物化”视图是相对普通视图而言的。
物化视图的特点:
   物化视图在某种意义上说就是个物理表,这点可从user_tables的查询结果,可以得到佐证
   物化视图也可以是一种段(segment),所以其有自己的物理存储属性;
   物化视图会占用数据库磁盘空间,这点可从user_segment的查询结果,可以得到佐证

物化视图的使用

物化视图的类型:oracle提供了两种方式,手工刷新和自动刷新,默认为手工刷新。即:ON DEMAND,ON COMMIT

二者的区别在于刷新方法的不同,ON DEMAND仅在该物化视图需要被刷新了才进行刷新(REFRESH),即更新物化视图,以保证和基表数据的一致性;ON COMMIT是说,一旦基表有了commit,即事务提交,则立刻刷新,立刻更新物化视图,使数据和基表一致

创建语句:

create materialized view mv_name[选项N] as select *from table_name;
[选项1]BUILD[IMMEDIATE,DEFERRED]是否在创建视图时生成数据,默认生成,DEFERRED为不生成数据,需要的时候生成。
[选项2]REFRESH[FAST,COMPLETE,FORCE,NEVER]FASTS是增量刷新,complete是全表刷新,force为如果增量刷新可以使用增量刷新,否则全表刷新,never是不进行刷新
[选项3]on[DEMAND,COMMIT]即手工刷新和提交时刷新
[选项4]start with通知数据库完成从主表到本地表第一次复制时间
[选项5]next说明刷新的时间间隔,下次刷新时间=上一次执行完成时间+间隔时间

前提

注意我们的基表必须要有主键。

create table B(cisid int primary key,name varchar2(10));
create table A(id int primary key,name varchar2(10));
cisid int constranint fk_cis_id foreign key (cisid) references B(cisid);

COMMIT刷新

 create materialized view V_AB REFRESH FORCE ON COMMIT as select *from A,B;

DEMAND刷新

 create materialized view v_ab REFRESH FORCE ON DEMAND
 START WITH SYSDATE
 NEXT SYSDATE+1 
 as select *from A,B;

快速刷新的建立

当用FAST选项创建实例化视图,必须创建基于主表的视图日志

create materialized view LOG ON A WITH ROWID;
create materialized view LOG ON B WITH ROWID;
create materialized view v_ab
   REFRESH FAST ON DEMAND
   START WITH SYSDATE
   NEXT SYSDATE+1 
   as select *from A,B

Search

    Table of Contents