原文链接:https://www.modb.pro/db/487999 物化视图是一种特殊的物理表,"物化"(Materialized)视图是相对普通视图而言的。==普通视图==++是虚拟表,应用的局限性大,任何对视图的查询,Oracle都实际上转换为视图SQL语句的查询。++ image.png 1、==物化视图==++存储基于远程表的数据,也可以称为快照,把远程库某一节点时间的数据复制同步到了本地库中,直接查询本地库即可,效率变快(直接带有固定的结果集),只是会有时间差而已++ 物化视图的类型:ON DEMAND、ON COMMIT二者的区别在于刷新方法的不同。 ==ON DEMAND==顾名思义,++仅在该物化视图“需要”被刷新了,才进行刷新(REFRESH),即更新物化视图,以保证和基表数据的一致性++;而==ON COMMIT==是说,++一旦基表有了COMMIT,即事务提交,则立刻刷新,立刻更新物化视图,使得数据和基表一致++。

物化视图的创建本身是很复杂和需要优化参数设置的,特别是针对大型生产数据库系统而言。但Oracle允许以这种最简单的,类似于普通视图的方式来做,所以不可避免的会涉及到==默认值问题==。也就是说Oracle给物化视图的重要定义参数的默认值处理是我们需要特别注意的。

  • 物化视图:在查询时直接读出物化视图中的数据。
  • 普通视图:在查询时需要在查询中嵌套子查询然后去访问原表。-
  • 物化视图:不可以更新,删除,修改等操作,只能够查询。
  • 普通视图:可以更新,删除,修改等操作,但是这些操作将直接反应在原表中。

2、本地库创建物化视图

2.1 需要的权限(或者直接给用户dba角色权限):

grant create materialized view to user_name;

2.2 创建:

create materialized view mv_base_brand
refresh force on demand
start with sysdate next to_date(concat(to_char(sysdate+1,‘dd- mm-yyyy’),‘01:25:00’),‘dd-mm-yyyy hh24:mi:ss’)
– 每天01点25执行
as
select * from ensys_table;

2.3 查询视图:

select * from mv_ensys_table ;

3、本地创建普通视图

CREATE [OR REPLACE] [{   FORCE|NOFORCE}] VIEW view_nameASSELECT查询[WITH READ ONLY CONSTRAINT]
  • OR REPLACE:如果视图已经存在,则替换旧视图。
  • FORCE:即使基表不存在,也可以创建该视图,但是该视图不能正常使用,当基表创建成功后,视图才能正常使用。
  • NOFORCE:如果基表不存在,无法创建视图,该项是默认选项。
  • WITH READ ONLY:默认可以通过视图对基表执行增删改操作,但是有很多在基表上的限制(比如:基表中某列不能为空,但是该列没有出现在视图中,则不能通过视图执行insert操作),WITH READ ONLY说明视图是只读视图,不能通过该视图进行增删改操作。现实开发中,基本上不通过视图对表中的数据进行增删改操作。