MATERIALIZED VIEW

转自新浪博客


       Oracle的实体化视图提供了强大的功能,可以用在不同的环境中,实体化视图和表一样可以直接进行查询。实体化视图可以基于分区表,实体化视图本身也可以分区。

 

        物化视图是包括一个查询结果的数据库对像(由系统实现定期刷新数据),物化视图不是在使用时才读取,而是预先计算并保存表连接或聚集等耗时较多的操作结果,这样,在执行查询时,就可以避免进行这些耗时的操作,大大提高了读取速度,特别适用抽取大数据量表某些信息以及数据链连接表使用。

        实体化视图还用于复制、移动计算,远程同步等方面。物化视图还可以进行远程数据的的本地复制,此时的物化视图存储也可以称为快照。可是用于实施数据库间的同步。通常情况下,物化视图用于复制的时候为“主表”,而在运用于数据仓库时称为“明细表”。 在数据仓库中,还经常使用查询重写(query rewrite)机制,这样不需要修改原有的查询语句,Oracle会自动选择合适的实体化视图进行查询,完全对应用透明。实体化视图和表一样可以直接进行查询。

        

        实体化视图有很多方面和索引很相似:使用实体化视图的目的是为了提高查询性能;实体化视图对应用透明,增加和删除实体化视图不会影响应用程序中SQL语句的正确性和有效性;实体化视图需要占用存储空间;当基表发生变化时,实体化视图也应当刷新。 

        materialized view 同snapshot是同一个概念。但同view是不一样的: 
       1)物化视图是存储数据的视图,存储了基础表的全部或者一部分数据,主要用作sql语句的优化,查询物化视图比查询表中的数据速度要快; 
       2)MV是自动刷新或者手动刷新的,View不用刷新; 
       3) MV也可以直接update,但是不影响base table,对View的update反映到base table上; 
       4)MV主要用于远程数据访问,mv中的数据需要占用磁盘空间,view中不保存数据 

 

使用语法:

CREATE MATERIALIZED VIEW XX

  REFRESH  [[fast | complete | force] 
         [on demand | commit] 
         [start with date] 
         [next date] 
         [with {primary key | rowid}] 
       ]

      [ENABLE | DISABLE] QUERY REWRITE

 

       Refresh 刷新子句:
       描述:当基表发生了DML操作后,实体化视图何时采用哪种方式和基表进行同步 
       取值:FAST—— 采用增量刷新,只刷新自上次刷新以后进行的修改 
                 COMPLETE ——对整个实体化视图进行完全的刷新 
                 FORCE(默认) ——Oracle在刷新时会去判断是否可以进行快速刷新,如果可以则采用Fast方式,否则采用Complete的方式,Force选项是默认选项 
                 ON DEMAND(默认) ——实体化视图在用户需要的时候进行刷新,可以手工通过DBMS_MVIEW.REFRESH等方法来进行刷新,也可以通过JOB定时进行刷新 
                 ON COMMIT 实体化视图在对基表的DML操作提交的同时进行刷新 

        START WITH——第一次刷新时间 
        NEXT——刷新时间间隔 
        WITH PRIMARY KEY(默认) ——生成主键实体化视图,也就是说实体化视图是基于表的主键,而不是ROWID(对应于ROWID子句)。 为了生成PRIMARY KEY子句,应该在表上定义主键,否则应该用基于ROWID的实体化视图。主键实体化视图允许识别实体化视图表而不影响实体化视图增量刷新的可用性 

 

        REWRITE 字句:包括ENABLE QUERY REWRITE和DISABLE QUERY REWRITE两种。

        分别指出创建的实体化视图是否支持查询重写。查询重写是指当对实体化视图的基表进行查询时,Oracle会自动判断能否通过查询实体化视图来得到结果,如果可以,则避免了聚集或连接操作,而直接从已经计算好的实体化视图中读取数据。默认 DISABLE QUERY REWRITE


你可能感兴趣的:(Oracle)