Oracle物化视图

  之前我们接触过的视图view,是基于基表数据生成的数据,这个视图表不会不占据数据磁盘空间,也就是逻辑表。使用这种视图只是简化你每次书写sql语句的代码量,在数据库性能方面没有起到任何作用。

  而物化视图material view 呢,它就是个物理表,占据数据磁盘空间,只是这个表的数据可以通过其他表查询出来。下面看一下创建物化视图的语法:

 create materialized view view_name
  refresh [fast|complete|force]
  [
    on [commit|demand] |
    start with (start_time) next (next_time)

  ]
  AS subquery;

  (1)视图数据生成时间有两种:不指定,默认开启 build immediate

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

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

  (2)视图刷新模式有两种:不指定,默认开启 on demand

    on demand 仅该物化视图需要被刷新的时候才刷新。

    on commit 一旦基表有数据更新,基表提交事务的时候立即刷新。

  (3)视图刷新方法有三种:

    complete(完全刷新):会删除表中的所有的记录,然后根据物化视图中查询语句的定义重新生成物化视图。

    fast(快速刷新):采用增量刷新的方法。

    force:这是oracle默认的刷新方式。Oracle会自动判断是否满足快速刷新的条件,如果满足则进行快速刷新,否则进行完全刷新。

  (4)案例:

create materialized view my_material refresh force on demand start with sysdate next
to_date(concat(to_char(sysdate+1,'dd-mm-yyyy'),'10:25:00'),'dd-mm-yyyy hh24:mi:ss') as
select * from user_info; --每天10点25刷新

  总结:物化视图类似于中间表,当查询某个业务需要联合多个表进行查询的时候,且需要消耗很长时间,大家都知道使用join等联合查询,是非常消耗性能,尤其当每个表中的数据量非常大的时候。这个时候可以考虑使用物化视图,定时更新数据,下次直接查询物化视图即可。

原文地址:https://www.cnblogs.com/gdpuzxs/p/6945276.html