怎么理解物化视图呢,先随意拿一个建物化视图的例子看一下。

create materialized view EBS_ACCOUNTS_HIERARCHY_MV

refresh complete on demand

as

select v.flex_value,

v.description,

case

when (sysdate between nvl(v.start_date_active, sysdate) and

nvl(v.end_date_active, sysdate)) and (v.enabled_flag = 'Y') then

'Y'

else

'N'

end enabled_flag,

cv.parent_flex_value, v.created_by,

v.creation_date,

v.last_update_date,

v.last_updated_by,

nvl(v.start_date_active, sysdate) start_date_active,

nvl(v.end_date_active, sysdate) end_date_active,

v.summary_flag

from fnd_flex_values_vl        v,

fnd_flex_value_sets       s,

fnd_flex_value_children_v cv

where s.flex_value_set_id = v.flex_value_set_id

and s.flex_value_set_name = ' xxx_COA_xx'

and cv.flex_value_set_id = s.flex_value_set_id

and cv.flex_value = v.flex_value;

若忽略掉materialized以及 refresh complete on demand是不是可以理解为创建视图(视图仅是举例,因为物化视图可以查询表,视图和其它的物化视图),那么这两个起什么作用呢,可以把它们试做在视图上加的trigger,当满足trigger的条件生效后,视图里的数据会变化。可以想成,数据属于一层,而物化视图在它的上一层,当满足一定条件时,select视图中的数据才会随着下层数据的变化而变化,这也说明了两点:

1. 可以用于预先计算并保存表连接或聚集等耗时较多的操作的结果,这样,在执行查询时,就可以避免进行这些耗时的操作,而从快速的得到结果。

2. 当未满足条件时,基表的数据改变,但物化视图的数据没有改变,查询获取时有可能获取不到最新的数据。

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

语法

物化视图语法:

create materialized view materialized_view_name

build [immediate|deferred]--1.创建方式

refresh [complete|fast|force|never]--2.物化视图刷新方式

on [commit|demand]--3.刷新触发方式

start with (start_date)--4.开始时间

next (interval_date)--5.间隔时间

with [primary key|rowid]--默认 primary key

ENABLE QUERY REWRITE--7.是否启用查询重写

as--8.关键字

select statement;--9.基表选取数据的select语句

1.创建方式默认是immediate,立即;deferred,延迟,至第一次refresh时,才生效。

2.物化视图刷新方式默认为force,意思是:如果可以快速刷新,就执行快速刷新;否则,执行完全刷新。  complete,完全刷新,即,刷新时更新全部数据,包括视图中已经生成的原有数据。  fast,快速刷新,只刷新增量部分。前提是,需要在基表上创建物化视图日志(见示例)。该日志记录基表数据变化情况,所以才能实现增量刷新。  never,从不刷新。

3.on commit,基表有commit动作时,刷新视图,不能跨库执行(因为不知道别的库的提交动作);on demand,在需要时刷新,即,根据后面设定的起始时间和时间间隔进行刷新,或者,手动调用dbms_mview包中的过程刷新时再执行刷新。

4和5.即开始刷新时间和下次刷新的时间间隔。如:start with sysdate next sysdate+1/1440表示马上开始,刷新间隔为1分钟。(与 on commit选项冲突)

6.基于基表的主键或者rowid创建。如果是基于rowid,不能对基表执行分组函数、多表连结等需要把多个rowid合成一行的操作(理由很简单:到底以哪个rowid为准呢?)。

7.如果设置了初始化参数query_rewrite_enabled=true则默认就会启用查询重写。但是,数据库默认该参数为false。并且,不是什么时候都应该启用查询重写。所以,该参数应该设置为false,而在创建特定物化视图时,根据需要开启该功能。另外,如果选择使用了上面第4‘5选项,则不支持查询重写功能(原因很简单,所谓重写,就是将对基表的查询定位到了物化视图上,而4、5选项会造成物化视图上部分数据延迟,所以,不能重写)。

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

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

名称

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成组出现

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

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

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

名称

WITH Clause

描述

取值

OBJECT ID

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

PRIMARY KEY

ROWID

SEQUENCE

默认

Oracle EBS 物化视图的更多相关文章

  1. Oracle之物化视图

    来源于:http://www.cnblogs.com/Ronger/archive/2012/03/28/2420962.html 近期根据项目业务需要对oracle的物化视图有所接触,在网上搜寻关于 ...

  2. 《oracle每天一练》Oracle之物化视图

    相关帖子思考和跟踪 本文转自Ronger 物化视图是一种特殊的物理表,“物化”(Materialized)视图是相对普通视图而言的.普通视图是虚拟表,应用的局限性大,任何对视图的查询,Oracle都实 ...

  3. Oracle创建物化视图

    1.物化视图语法 create materialized view [view_name] refresh [fast|complete|force] [ on [commit|demand] | s ...

  4. 【转】Oracle之物化视图

    原文地址:http://www.cnblogs.com/Ronger/archive/2012/03/28/2420962.html 物化视图是一种特殊的物理表,“物化”(Materialized)视 ...

  5. oracle远程物化视图

    一.创建远程物化视图日志 源端: CREATE MATERIALIZED VIEW LOG ON tozwdb.test tablespace tozwdb_data WITH ROWID; 二.付权 ...

  6. ORACLE建立物化视图

    --使用 on commit 的方式建立物化视图 create materialized view emp_dept refresh on commit as select t.*,d.dname f ...

  7. Oracle EBS View 视图查看没有数据

    --关于看视图查看没有数据的问题 --原因OU过滤关系 --Oracle SQL*Plus --toad EXECUTE  fnd_client_info.set_org_context(:ou_id ...

  8. Oracle数据库入门——如何根据物化视图日志快速刷新物化视图

    Oracle物化视图的快速刷新机制是通过物化视图日志完成的.Oracle如何通过一个物化视图日志就可以支持多个物化视图的快速刷新呢,本文简单的描述一下刷新的原理. 首先,看一下物化视图的结构:SQL& ...

  9. Oracle数据库入门——物化视图语法

    一.Oracle物化视图语法 create materialized view [view_name]refresh [fast|complete|force][on [commit|demand] ...

随机推荐

  1. filebeat-1-连通logstash

    类似flume, 但功能更为强大 Filebeat是一个日志文件托运工具,在你的服务器上安装客户端后,filebeat会监控日志目录或者指定的日志文件,追踪读取这些文件(追踪文件的变化,不停的读),并 ...

  2. CentOS7 下安装 NFS,Linux/Windows 作为客户端

    目录 一.简介 1. 定义 2. 版本和变化 3. 部署说明 二.服务端 1. 关闭防火墙 2. 安装 nfs 3. 配置说明 4. 配置共享目录 5. 启动服务 6. 确认启动成功 三.Linux ...

  3. BVH with SAH (Bounding Volume Hierarchy with Surface Area Heuristic)

      - BVH with SAH (Bounding Volume Hierarchy  with Surface Area Heuristic) -      0. Overview 包围层次盒(B ...

  4. windows系统 PHP安装Redis扩展

    cmd开启/关闭redis redis所在路径: D:\redis\Redis-x64-3.2.100 启动: start cmd /k "cd /d D:\redis\Redis-x64- ...

  5. [USACO 07DEC]Best Cow Line, Gold

    Description 题库链接 给以长度为 \(n\) 的字符串,要求每次只能从两边取一个字符,使得取出来之后字典序最小. \(1\leq n\leq 30000\) Solution 将字符串翻转 ...

  6. el-upload源码修改跳坑

    之前给element-ui提了一个问题,结果没有鸟我,没办法,只能修改源码来满足需求了 (备注:element-ui2依然没有修改,为了迎合产品还是要改源码) 本文讨论的组件属性仅限于list-typ ...

  7. oracle中数据类型number(m,n)

    oracle中数据类型number(m,n)中m表示的是所有有效数字的位数,n表示的是小数位的位数.m的范围是1-38,即最大38位. 1> .NUMBER类型细讲:Oracle   numbe ...

  8. 面试问题:你了解Java内存模型么(Java7、8、9内存模型的区别)

    Java内存模型是每个java程序员必须掌握理解的,这是Java的核心基础,对我们编写代码特别是并发编程时有很大帮助.由于Java程序是交由JVM执行的,所以我们在谈Java内存区域划分的时候事实上是 ...

  9. 几个常用T_SQL语句比较

    UNION ALL VS UNION : union all 对两个结果进行并集操作,包括重复行,即所有的结果全部显示,不管是不是重复:union 对两个结果集进行并集操作,不包括重复行,相当于 di ...

  10. HDU1824(2-SAT)

    Let's go home Time Limit: 10000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)To ...