zoukankan      html  css  js  c++  java
  • 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等联合查询,是非常消耗性能,尤其当每个表中的数据量非常大的时候。这个时候可以考虑使用物化视图,定时更新数据,下次直接查询物化视图即可。

  • 相关阅读:
    笔记
    【转】并行类加载——让tomcat玩转双十一 @双十一实战
    Twitter Snowflake 生成唯一id java版本
    nginx添加 nginx_heath模块
    谁在关心toString的性能?
    HashMap的工作原理
    修改nginx版本名称伪装任意web server
    nginx concat模块配置 页面返回400 bad request
    linux 安装rz sz命令
    nginx 添加nginx-http-concat模块
  • 原文地址:https://www.cnblogs.com/gdpuzxs/p/6945276.html
Copyright © 2011-2022 走看看