大学老师直接跳过的视图,没曾想面试居然问了

大学时因为课程较赶,老师把视图的章节跳过了,让我一度以为基本没用,等到入了职才知道原来有用到。

为了找到面试的感觉,前几天专门投了简历,没想到还问了物化视图。还好看过,不然就尴尬了。

普通视图

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

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

视图具有以下特点:

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

如何创建普通视图

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 创建时不生成数据,以后根据需要再生成。理解为创建一个空的视图。

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 进行全量覆盖刷新。


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

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

#面试##大数据##数据库#
大数据从入门到放弃 文章被收录于专栏

写点大数据相关的内容,一起交流进步

全部评论
很有帮助
点赞 回复 分享
发布于 2022-06-20 17:48
哈哈,今天数据库期末复习刚刚复习到
点赞 回复 分享
发布于 2022-06-22 09:40
啥公司用到了这个呀,我感觉用不到呀
点赞 回复 分享
发布于 2022-06-22 11:43
能考这个也是偏到家了。。
点赞 回复 分享
发布于 2022-08-18 10:13 北京

相关推荐

10 16 评论
分享
牛客网
牛客企业服务