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

2025-08-21 01:37:58

目 录

普通视图如何创建普通视图物化视图增量刷新是如何判断哪些记录被改动的?物化视图创建案例

普通视图

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

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

视图具有以下特点:

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

如何创建普通视图

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

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

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

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

满月酒多少天办合适?一定要满月当天办吗?
大家知道《莽荒纪》多久更新一次吗