物化视图
物化视图概念
我们都知道视图(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