oracle 物化视图

操作型BI的OLAP重要特性,就是分析数据的实时性。 
 使用场景
              在只读或“精读”环境工作更好,不适用高端的联机处理系统,在并发事务不是很高的系统也可以使用
使用前提:
              调整初始参数 query_rewrite_enabled,query_rewrite_integrity; 该参数可以动态调整,不需要重启
               alter system set query_rewrite_enabled=true;
               alter system set query_rewrite_integrity=trusted scope=both;

                        
              Enforced: 最高级别的验证,根据定义的constraints和relations,并且去验证所定义的constraints和relations,只有符合定义的constratins和relations时,才考虑使用物化视图
             Trusted:总是相信相信数据库定义的constraints和relations,只要constraints和relations满足使用物化视图条件,就考虑使用物化视图来重写查询
            Stale_tolerated:允许查询重写使用stale的物化视图,允许视图的刷新滞后
简单例子
                create  materialized view  mview_owner_sum
                build immediate
                refresh on commit
                enable query rewrite
                as
                select count(*),owner from test
                 group by owner;

 

 oracle在数据更新后有可能(refresh on commit)自动重写物化视图

 刷新(Refresh):指当基表发生了DML操作后,物化视图何时采用哪种方式和基表进行同步。默认为 refresh force on demand.

     刷新的模式有两种:ON DEMAND:手动或定时刷新;ON COMMIT:事物提交时自动刷新。
     刷新的方法有四种:FAST、COMPLETE、FORCE和NEVER。FAST刷新采用增量刷新,只刷新自上次刷新以后进行的修改。COMPLETE刷新对整个物化视图进行完全的刷新。如果选择FORCE方式,则Oracle在刷新时会去判断是否可以进行快速刷新,如果可以则采用FAST方式,否则采用COMPLETE的方式。NEVER指物化视图不进行任何刷新。
     对于已经创建好的物化视图,可以修改其刷新方式,比如把物化视图mv_name的刷新方式修改为每天晚上10点刷新一次:alter materialized view mv_name refresh force on demand start with sysdate next to_date(concat(to_char(sysdate+1,’dd-mm-yyyy’),’ 22:00:00′),’dd-mm-yyyy hh24:mi:ss’)

但不是能对任意的物化视图进行同步,对单一表或者没有聚集的连接可以重写。
查询重写:
              如果查询语句符合如下相关条件,oracle优化器会从物化视图中查询,也就是查询重写。
              1、sql和定义视图的sql 完全匹配,可忽略空白字符大小以及其他格式
              2、部分正文匹配
              3、查询的数据可以从物化视图中提取出来
              4、连接兼容
              5、分组兼容
              6、聚集兼容
            (4、5、6的原则实际上就是做相关连接、分组、聚集相关数据全包含在物化视图中才能重写查询)
              7、另外在不同的优化策略下,是否查询重写是不一样的。在默认choose模式数据量不大的情况基本不会查询重写。

根据上述原则,可通过如下的方法达到尽可能的查询重写,达到优化的目的:

1、 尽可能的增加物化视图对应的基本表的之间的约束关系,如主键、外键,等,
这样查询是如果对应数据可从物化视图中提取出来,系统会有可能改写查询,采用物化视图
2、可以通过dimension对象可以指定相关表、字段之间的关系

 

Tagged , . Bookmark the permalink.

Leave a Reply

Your email address will not be published. Required fields are marked *