注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

程序员驿站

淘宝店:http://shop106888457.taobao.com

 
 
 

日志

 
 

Oracle MATERIALIZED VIEW -- 创建物化视图  

2015-01-29 15:40:04|  分类: Oracle |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

物化视图概述

Oracle的物化视图提供了强大的功能,可以用在不同的环境中。在不同的环境中,物化视图的作用也不相同。数据仓库中的物化视图主要用于预先计算并保存表连接或聚集等耗时较多的操作的结果,这样,在执行查询时,就可以避免进行这些耗时的操作,而从快速的得到结果。在数据仓库中,还经常使用查询重写(query rewrite)机制,这样不需要修改原有的查询语句,Oracle会自动选择合适的物化视图进行查询,完全对应用透明。物化视图和表一样可以直接进行查询。物化视图可以基于分区表,物化视图本身也可以分区。除了在数据仓库中使用,物化视图还用于复制、移动计算等方面。物化视图有很多方面和索引很相似:使用物化视图的目的是为了提高查询性能;物化视图对应用透明,增加和删除物化视图不会影响应用程序中SQL语句的正确性和有效性;物化视图需要占用存储空间;当基表发生变化时,物化视图也应当刷新。

 

创建物化试图主要选项说明

创建物化视图时可以指定多种选项,下面对几种主要的选项进行简单说明:

 

名称

ON PREBUILD TABLE

描述

将已经存在的表注册为物化视图。同时还必须提供描述创建该表的查询的 SELECT 子句。可能无法始终保证查询的精度与表的精度匹配。为了克服此问题,应该在规范中包含 WITH REDUCED PRECISION 子句。

 

 

 

名称

Build Clause

创建方式

描述

包括BUILD IMMEDIATEBUILD DEFERRED两种

取值

BUILD IMMEDIATE

在创建物化视图的时候就生成数据

BUILD DEFERRED

在创建时不生成数据,以后根据需要在生成数据

默认

BUILD IMMEDIATE

 

 

 

名称

Refresh

刷新子句

描述

当基表发生了DML操作后,物化视图何时采用哪种方式和基表进行同步

语法

[refresh [fast | complete | force]

         [on demand | commit]

         [start with date]

         [next date]

         [with {primary key | rowid}]

]

取值

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的物化视图。主键物化视图允许识别物化视图表而不影响物化视图增量刷新的可用性

WITH ROWID

只有一个单一的主表,不能包括下面任何一项:
●Distinct
聚合函数
●Group by
子查询
连接
●SET
操作

  

 

 

 

名称

Query Rewrite

查询重写

描述

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

取值

ENABLE QUERY REWRITE

支持查询重写

DISABLE QUERY REWRITE

不支持查询重写

默认

DISABLE QUERY REWRITE

 

创建实体化试图日志主要选项说明

如果需要进行快速刷新,则需要建立物化视图日志。物化视图日志根据不同物化视图的快速刷新的需要,可以建立为ROWIDPRIMARY KEY类型的。还可以选择是否包括SEQUENCEINCLUDING NEW VALUES以及指定列的列表。

 

名称

WITH Clause

描述

 

取值

OBJECT ID

如果是对象物化视图(object materialized view),则只能采用该方式

PRIMARY KEY

 

ROWID

 

SEQUENCE

 

默认

 

 

实体化试图举例

创建物化视图时应先创建存储的日志空间

[c-sharp] view plaincopy
  1. create materialized view log on table1       
  2.   
  3.      
  4. tablespace ts_data --日志保存在特定的表空间       
  5.   
  6.   
  7. with rowid;     

然后创建物化视图

[c-sharp] view plaincopy
  1. create materialized view mv_table1           
  2.   
  3. on prebuild table --将物化视图建立在一个已经存在的表上           
  4.   
  5. tablespace ts_data --保存表空间           
  6.   
  7. build deferred --延迟刷新不立即刷新           
  8.   
  9. refresh force --如果可以快速刷新则进行快速刷新,否则完全刷新           
  10.   
  11. on demand --按照指定方式刷新           
  12.   
  13. as select * from table1;    
  

删除物化视图日志

[c-sharp] view plaincopy
  1. drop materialized view log on table1;     
  

删除物化视图

[c-sharp] view plaincopy
  1. drop materialized view mv_table1;  

  评论这张
 
阅读(363)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017