什么是视图?普通视图和物化视图什么区别?看这一篇就明白了

普通视图

视图可以理解为一张表或多张表的预计算,这些表称为基表

它可以将所需要查询的结果封装成一张虚拟表,基于它创建时指定的查询语句返回的结果集。

视图具有以下特点:

  • 安全性:只将需要的结果呈现出来,查询者不知道具体用了哪些表或哪些字段,因此比较安全;
  • 屏蔽复杂性:下层计算可能做了很多复杂的关联操作,只需要让开发者将其实现,将结果以视图呈现给使用者。

如何创建普通视图

CREATE [OR REPLACE] VIEW view
[(alias[, alias]...)]
AS subquery
[WITH READ ONLY];

例如:

create view v_emp as select * from emp where deptno = 30;

物化视图

对于普通视图而言,其真实数据在基表中,即每次查询视图都是需要执行查询语句。

有时候为了防止每次都查询,将结果集存储起来,这种有真实数据的视图,称为物化视图。

什么情况下适合用物化视图?

基表没有很多 DML,且每次查询都需要耗费较大资源的情况下,可以考虑用物化视图。

物化视图的创建是这样的:

CREATE METERIALIZED VIEW view_name
[BUILD IMMEDIATE | BUILD DEFERRED ]①
REFRESH [FAST|COMPLETE|FORCE]② 
[ON [COMMIT |DEMAND ] | START WITH (start_time) NEXT(next_time)]③
AS subquery

① BUILD IMMEDIATE 创建物化视图的时候就生成数据;

BUILD DEFERRED 创建时不生成数据,以后根据需要再生成。理解为创建一个空的视图。

默认是 BUILD IMMEDIATE。

② REFRESH:当基表发生 DML 操作后,物化视图何时采用哪种方式和基表同步数据。

REFRESH 后面跟着的刷新方法有:FAST、COMPLETE、FORCE。

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

  • COMPLETE:对整个物化视图进行完全的刷新,相当于先 truncate 再 insert。

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

③ 刷新的模式有两种:ON DEMAND 和 ON COMMIT。默认为 ON DEMAND

  • ON DEMAND 需要手动刷新物化视图。

  • ON COMMIT 在基表发生 COMMIT 操作时刷新。

增量刷新是如何判断哪些记录被改动的?

通过对基表建立物化视图日志,就可以监测到基表的变动。

每当基表有变动的时候就会往对应的物化视图日志中写入数据。

当进行 Fast 刷新的时候,物化视图日志中的改动就会写入到物化视图中,这样就实现了增量刷新。

物化视图创建案例

create materialized view my_materialized
refresh complete 
on demand start with sysdate next
to_date(concat(to_char(sysdate + 1,'dd-mm-yyyy'),'00:03:00'),'dd-mm-yyyy hh24:mi:ss')  
as select * from  user_info;  

这个物化视图表示从当前日期开始,往后每天 00:03 进行全量覆盖刷新。

------------------------------------------------✂----------------------------------------------

如果觉得对你有帮助,或者觉得还行的话,麻烦动动小手点个小赞。

转载请注明出处 【大数据的奇妙冒险】

  • 10
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值