zoukankan      html  css  js  c++  java
  • Oracle 物化视图

    什么是物化视图、物化视图日志.

    物化视图的刷新模式、刷新方法

    物化视图

       1、物化视图是已存储查询结果集的数据库对象.

       2、物化视图可以基于表、视图、物化视图创建.

      

       3、物化视图是一种特殊的物理表,物化视图是相对普通视图而言的,

          普通视图是虚拟表.

                      

    物化视图的特点

             1、物化视图包含真实的数据而且占用数据库中的存储空间.

             2、当master tables中的数据发生改变,物化视图中的数据可以刷新与master tables中数据保持一致.

             3、当使用查询重写操作时可以提高查询语句的执行性能.

      

    创建最简单的物化视图

    创建物化视图必须拥有CREATE MATERIALIZED VIEW的系统权限

    SQL> CREATE MATERIALIZED VIEW MV_EMP AS SELECT * FROM SCOTT.EMP;

    Materialized view created.

    SQL> select object_name,object_type,status from user_objects where object_name='MV_EMP';

    OBJECT_NAME  OBJECT_TYPE         STATUS

    --------------------------------------------------------------------------------

    MV_EMP       TABLE               VALID

    MV_EMP      MATERIALIZED VIEW   VALID

    SQL> select segment_name,segment_type,tablespace_name,bytes,blocks from user_segments where segment_name='MV_EMP';

    SEGMENT_NAME  SEGMENT_TYPE  TABLESPACE_NAME     BYTES     BLOCKS

    ----------------------------------------------------------------

    MV_EMP        TABLE         USERS               65536         8

    SQL> select owner,mview_name,rewrite_enabled,refresh_mode,refresh_method,build_mode,compile_state from user_mviews;

    OWNER      MVIEW_NAME   REWRITE_ENABLED REFRESH_MODE REFRESH_METHOD    BUILD_MODE COMPILE_STATE

    ------------------------------------------------------------------------------------------------

    SCOTT      MV_EMP       N               DEMAND       FORCE             IMMEDIATE  VALID

    创建物化视图时如果没指定创建方式、刷新模式和刷新方法,则Oracle默认的创建方式为BUILD IMMEDIATE

    ,默认的刷新模式为ON DEMAND,默认的刷新方法为REFRESH FORCE.

    BUILD IMMEDIATE表示在创建物化视图的时候就生成数据,默认方式

    BUILD DEFERRED表示在创建物化视图时不生成数据,以后根据需要再生成数据

    刷新模式

    物化视图有2种刷新模式:ON DEMAND和ON COMMIT, ON DEMAND是默认的刷新模式

    ON DEMAND表示物化视图“需要”被刷新时才更新,通过手工执行DBMS_MVIEW包中的存储过程或

    者创建oracle的job来调用相同的存储过程实现物化视图的刷新.使用ON DEMAND可以定义START

    WITH语句和NEXT语句,START WITH设定物化视图第一次执行自动刷新的时间,NEXT设定物化视图

    自动刷新的时间间隔.

    ON COMMIT表示一旦基表有事务提交则立即更新物化视图,ON COMMIT模式增加了事务提交完成需

    要的时间,因为数据库将执行物化视图的刷新作为事务处理的一部分.使用ON COMMIT不能定义

    START WITH和NEXT语句,不支持通过dblink创建在remote table的物化视图,否则会报

    ORA-12054: cannot set the ON COMMIT refresh attribute for the materialized view

    ON DEMAND和ON COMMIT的区别:前者不刷新(手工或自动)就不更新物化视图,而后者只要基表发

    生了事务提交就会更新物化视图.

    物化视图共有3种刷新方法:

    1、FAST 只刷新自上次刷新以后master table中进行的修改,必须在master table定义物化视图日志,物化视图日志记录master table进行的修改,使物化视图可以实现增量刷新.

    2、COMPLETE 对整个物化视图进行重定义查询.

    3、FORCE 刷新时判断是否可以进行fast refresh,如果可以则进行fast refresh,否则进行complete refresh, force refresh是默认的刷新方法.

    物化视图的查询重写

    查询重写是指当对物化视图的基表进行查询时,Oracle会自动判断能否通过查询物化视图来得到结果,如果可以则避免了对基表的聚集或连接操作,直接从物化视图中读取数据对查询进行快速的响应.

    查询重写(Query Rewrite)包括ENABLE QUERY REWRITE和DISABLE QUERY REWRITE

    ENABLE QUERY REWRITE表示创建的物化视图持查询重写

    DISABLE QUERY REWRITE表示创建的物化视图不支持查询重写

    默认为DISABLE QUERY REWRITE

    如果创建的物化视图启用了查询重写,必须使用DBMS_STATS包收集物化视图的统计信息,数据库需要使用收集到的统计信息优化查询重写.

    创建物化视图的AS子查询语句

    当创建物化视图时,数据库执行子查询语句并将查询的结果集存放在物化视图中, 这个子查询语句可以是任何合法的select语句,但不是所有的都支持fast refresh,不是所有的都支持query rewrite.

    对物化视图子查询语句的一些注意事项:

    1、创建物化视图时如果指定BUILD DEFERRED,数据库不会立即执行查询语句

    2、Oracle建议子查询语句中FROM clause中引用的每个表和视图都包含这些对象所属的用户

    子查询语句的一些限制:

    1、子查询语句中可以使用SYS用户的表、视图和物化视图,但是创建的物化视图不允许启用QUERY REWRITE

    2、子查询语句中不能使用闪回查询的AS OF语句

    3、带有GROUP BY语句的materialized join views and materialized aggregate views不能从index-organized的表中查询

    4、不能包含LONG或者LONG RAW类型的columns

    5、不能包含virtual columns

    6、不能使用临时表

  • 相关阅读:
    手机验证码登录注册--
    防止注册机,登录时-验证码图片的生成=前端vue+后端node
    VUE中数据排序sort() / 数据反转 reverse() 的使用
    将后台数据数组对象(对象里边包含数组对象)---改为前端想要的数组对象--改变key值(替换)
    vue--ui:antd pro框架--vue.config.js引入高德地图--描绘轨迹
    创建数据库-表-增加,设置主键
    mysql--各种安装包版本安装
    Vuex异步请求存取步骤
    从后往前查找去掉字符串最指定元素
    python安装第三方库
  • 原文地址:https://www.cnblogs.com/houguiqiang/p/3320909.html
Copyright © 2011-2022 走看看