oracle物化视图

作者:惜分飞


一、创建物化视图主要语法


create          materialized          view          [view_name]        


                  {TABLESPACE (表空间名)}         --保存表空间        


                  {BUILD [DEFERRED|IMMEDIATE(默认值)]}          --延迟刷新还是立即刷新        


         refresh [fast|complete|         force         ]        


         [        


         on          [         commit         |demand] |        


         start          with         (start_time)          next         (next_time)        


         ]        


         as        


         {创建物化视图用的查询语句}


二、相关参数说明

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

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

名称

ON PREBUILD TABLE

描述

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

名称

Build Clause

创建方式

描述

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

取值

ENABLE QUERY REWRITE

支持查询重写

DISABLE QUERY REWRITE

不支持查询重写

默认

DISABLE QUERY REWRITE

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

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

名称

WITH Clause

描述

 

取值

OBJECT ID

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

PRIMARY KEY

 

ROWID

 

SEQUENCE

 

默认

PRIMARY KEY

三、举例说明
1、简单示例


create          materialized          view          MV_except_pattern_orders        


         refresh Complete          on         demand        


                  start          with         to_date(         '2010-11-06 13:20:51'         ,         'YYYY-MM-DD HH24:MI:SS'         )          next         sysdate+1/(24*60)        


         as        


                  select         *          from          v_except_pattern_orders


2、带日志物化视图


--创建物化视图日志 
 
 
 
 
  create 
   materialized  
  view 
   log  
  on 
  table1 
 
 
 
 
  tablespace ts_data  
  --日志保存在特定的表空间 
 
 
 
 
  with 
   rowid; 
 
 
 
 
  --创建物化视图主体 
 
 
 
 
  create 
   materialized  
  view 
   MV_LVY_LEVYDETAILDATA 
 
 
 
 
  TABLESPACE ZGMV_DATA  
  --保存表空间 
 
 
 
 
  BUILD DEFERRED  
  --延迟刷新不立即刷新 
 
 
 
 
  refresh  
  force 
  --如果可以快速刷新则进行快速刷新,否则完全刷新 
 
 
 
 
  on 
   demand  
  --按照指定方式刷新 
 
 
 
 
  start  
  with 
  to_date( 
  '24-11-2005 18:00:10' 
  ,  
  'dd-mm-yyyy hh24:mi:ss' 
  )  
  --第一次刷新时间 
 
 
 
 
  next 
   TRUNC(SYSDATE+1)+18/24  
  --刷新时间间隔 
 
 
 
 
  as 
 
 
 
 
  as 
   select 
  *  
  from 
  table1;