Oracle普通视图和物化视图的区别

目录

物化视图介绍

刷新的方法有四种:FAST、COMPLETE、FORCE和NEVER

物化视图的类型:ON DEMAND、ON COMMIT

创建时生成数据分为两种:build immediate 和 build deferred

案例使用


物化视图介绍

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

刷新的方法有四种:FAST、COMPLETE、FORCE和NEVER

FAST刷新采用增量刷新,只刷新自上次刷新以后进行的修改。

COMPLETE刷新对整个物化视图进行完全的刷新。

FORCE方式,则Oracle在刷新时会去判断是否可以进行快速刷新,如果可以则采用FAST方式,否则采用COMPLETE的方式。

NEVER指物化视图不进行任何刷新。

物化视图的类型:ON DEMANDON COMMIT

二者的区别在于刷新方法的不同:

ON DEMAND:仅在该物化视图需要被刷新了,才进行刷新(REFRESH),即更新物化视图,以保证和基表数据的一致性;

/*默认情况下,如果没指定刷新方法和刷新模式,则Oracle默认为FORCE和DEMAND。*/
create materialized view mv_tb as select * from tb_name;

/*指定物化视图每天刷新一次*/
create materialized view mv_name refresh force on demand start with sysdate
next sysdate+1; 
/*要指定刷新时间比如每天晚上22:00定时刷新一次*/
create materialized view mv_name 
refresh force on demand 
start with sysdate 
next to_date( concat(to_char( sysdate+1,'dd-mm-yyyy'),' 22:00:00'),'dd-mm-yyyy hh24:mi:ss');

ON COMMIT:一旦基表有了COMMIT,即事务提交,则立刻刷新,立刻更新物化视图,使得数据和基表一致。

/*创建ON COMMIT物化视图*/
create materialized view mv_tb refresh force on commit as select * from tb_name

创建时生成数据分为两种:build immediate 和 build deferred

分为两种:build immediate 和 build deferred

build immediate 是在创建物化视图的时候就生成数据 。

build deferred 则在创建时不生成数据,以后根据需要在生成数据

如果不指定,则默认为 build immediate

案例使用

我们如果遇到需要从其它系统的数据库中取数据进行统计分析的问题,假如双方数据库都是ORACLE11g,同步表:test_mz_fee

 /*1、创建DB_LINK*/

/*创建DB_LINK*/
create public database link dblink_his connect to system using '192.168.1.73:1521/oracle';
/*删除DB_LINK*/
drop database link dblink_his; 
/*删除的时候报错:ORA-02018:database link of same name has an open connection*/
/*关闭dblink:*/
alter session close database link dblink_his;

/*2、创建Oracle物化视图快速刷新日志:为配合增量刷新,ORACLE要求要在住表上建立物化视图日志。*/

create materialized view log on test_mz_fee with primary key  including new values;  

/*3、创建Oracle物化视图
  Oracle物化视图,从名字上面来开,它应该是属于视图,但是确实物化。
  其物化是针对普通视图并没有真正的物理存储而言,其实可以简单的把物化视图看做一个物理表。
*/

create materialized view mv_test_mz_fee /*创建物化视图*/  
 build immediate  /*在视图编写好后创建*/  
  refresh fast with primary key  /*根据主表主键增量刷新(fast,增量)  */
 on demand  /*在用户需要时,由用户刷新 */ 
  enable query rewrite  /*可读写*/  
 as  
 select * from test_mz_fee@dblink_his; /*查询语句*/

/*4、视图刷新
    选择使用ORACLE自带工具DBMS_MVIEW工具包中REFRESH方法对物化视图进行刷新。
    该方法有两个参数,第一个参数是需要刷新的物化视图名称,第二个参数是刷新方式。
    我们可以写存储过来,对每个物化视图调用一次REFRESH方法,也可以使用“,”把物化视图连接以来,一次刷新。如下:*/

create or replace procdure p_mview_refresh as  
begin  
dbms_mview.refresh('mv_test_mz_fee','f');  
end p_mview_refresh;  
 
/*方式2*/
create or replace procdure p_mview_refresh as  
begin  
dbms_mview.refresh('mv_test_mz_fee1,mv_test_mz_fee2','ff');
end p_mview_refresh;  

/*注意:
1、如果需要同时刷新多个物化视图,必须用逗号把各个物化视图名称连接起来,并对每个视图都要指明刷新方式(f、增量刷新,c、完全刷新,?、强制刷新)。
2、当日志和物化视图创建好后,删除日志,则需要重新创建物化视图,否则无法增量刷新。
3、因为上面写的物化视图时根据主键进行更新,因此,主表必须有主键。*/

/*5、日志和物化视图要删除*/

drop materialized view log on test_mz_fee@dblink_his;  
drop materialized view mv_test_mz_fee1;  
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Aries·Zhao

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值