`
maosheng
  • 浏览: 549936 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Oracle 实体化视图

阅读更多
简介:
MView中文名称为实体化视图(Materialized View),相对于普通的视图来说,MView的不同之处在于MView实体化视图管理存储数据,占据数据库的物理空间。MView的结果会保存在一个普通的数据表中,在对MView进行查询的时候不再会对创建MView的基表进行查询,而是直接查询MView对应的结果表,然后通过定期的刷新机制来更新MView表中的数据。

物化视图可以查询表,视图和其它的物化视图。

MView在实际中的主要作用
1、减轻网络负担:通过MV将数据从一个数据库分发到多个不同的数据库上,通过对多个数据库访问来减轻对单个数据库的网络负担。
2、搭建分发环境:通过从一个中央数据库将数据分发到多个节点数据库,达到分发数据的目的。
3、复制数据子集:MV可以进行行级/列级的筛选,这样可以复制需要的那一部分数据。

实体化视图是用于汇总,预计算,复制或分发数据的对象, 在大型的数据库中使用它可以提高涉及到的SUM,COUNT,AVG,MIN,MAX等的表的查询的速度。

创建实体化视图管理的用户的权限必须有: CREATE ANY MATERIALZED VIEW,CREATE TABLE,CREATE VIEW,SELECT等。

创建实体化视图:
创建物化视图主要语法:
create materialized view [view_name]
     {TABLESPACE (表空间名)}              --保存表空间
     {BUILD [DEFERRED|IMMEDIATE(默认值)]} --延迟刷新还是立即刷新
refresh [fast|complete|force]
[
on [commit|demand] |
start with (start_time) next (next_time)
]
as
{创建物化视图用的查询语句}

相关参数说明:
1,
Build子句:定义创建方式,包括BUILD IMMEDIATE和BUILD DEFERRED两种
BUILD IMMEDIATE 在创建实体化视图的时候就生成数据,默认 BUILD IMMEDIATE 
BUILD DEFERRED 在创建时不生成数据,以后根据需要在生成数据

2,
Refresh子句:定义数据同步刷新,当基表发生了DML操作后,实体化视图何时采用哪种方式和基表进行同步,语法:
[refresh [fast | complete | force]
         [on demand | commit]
         [start with date]
         [next date]
         [with {primary key | rowid}]
]

FAST 采用增量刷新,只刷新自上次刷新以后进行的修改,如果指定REFRESH FAST子句,那么应该对主表创建物化视图日志,如果没有建立MView Log的话要进行快速刷新的话会报错
注意:对于增量刷新选项,如果在子查询中存在分析函数,则物化视图不起作用。

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操作

3,
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以及指定列的列表。

物化视图可以进行分区。而且基于分区的物化视图可以支持分区变化跟踪(PCT)。具有这种特性的物化视图,当基表进行了分区维护操作后,仍然可以进行快速刷新操作。

创建多表关联的实体化视图:
实体化视图包含多表关联,但不包含聚合操作,仅包含表关联的实体化视图同样支持在两种情况下刷新:
ON COMMIT 和 ON DEMAND。在 ON COMMIT 下,当基表发生DML操作并提交commit 的时候,实体化视图被刷新。
Oracle不允许实体化视图中有self-jions 的存在。
假如指定刷新方式为REFRESH FAST, oracle 执行附加的校验,以确定fast refresh能被执行。这些附加的检查包括:
1 每个基表下必须创建相应的 materialized view log
2 每个基表的rowid 必须在实体化视图的select 语句中出现
3 如果存在外联接,在where 子句不能有任何的selections.并且,所有的关联必须以AND 相连,并且用“=”操作符。
4 如果存在外联接,唯一性约束必须存在于外联的 inner table 的相关列中。

创建聚合类型的实体化视图:
为了能够进行快速刷新(fast refersh),在select 语句中必须包含所有在group by中出现的列名,并且必须有一个count(*),所有在gorup by 中出现的列都必须有一个count(列名)出现在select 中。同样,所有于实体化视图相关的表上都必须创建实体化和视图日志。有效的聚合函数包括:
SUM, COUNT(x),COUNT(*),AVG,VARIANCE,STDDEV,MIN,MAX被聚合的值可以是任何的
sql表达式。

REFRESH FAST 总结:
一个包含关联和聚合的实体化视图是可能的。但有如下限制:
1,实体化视图中不能包含非复用的表达式(具有实时特征的)。比如SYSDATE and ROWNUM.
2,实体化视图中不能包含RAW or LONG 数据类型。
3,实体化视图相关的表必须创建实体化视图日志,并且满足如下条件
  包含被实体化视图引用到的所有的列。指定with rowid和INCLUDING NEW VALUES.
  如果表的预期操作是inserts/direct-loads, deletes, and updates的混合,指定SEQUENCE子句只用SUM,COUNT,AVG,STDDEV,VARIANCE,MIN and MAX支持fast refresh.
  对于每个聚合agg(expr),必须相应写一个count(expr)与之对应.
  如果VARIANCE(expr)or STDDEV(expr)被指定,那么COUNT(expr)and SUM(expr) 必须被指定。在select列表中必须包含所有group by中出现的列.如果实体化视图有如下的一点,那么fast refresh 只支持常规DML inserts和直接路径的装载(direct loads)
   a 实体化视图包含MIN 或者 MAX
   b 实体化视图包含SUM(expr)但是没有COUNT(expr)
   c 实体化视图中不包含COUNT(*)
   如上的实体化视图称之为insert-only materialized view.

包含MAX or MIN实体化视图在delete或者混合的DML操作之后可以是 fast refresh,条件是视图中没有where 子句。
(10g以上适用)
如果没有外联接,在where 子句中可以包含有选择性的条件和关联
如果实体化视图中包含外联接,fast refresh只支持在outer table被修改的情况。同样,唯一性约束必须存在于inner join table中。如果有外联,所有的关联条件都必须用 AND 连接和必须用 = 操作符。

分享到:
评论

相关推荐

    探讨实体化视图刷新的机制

    探讨Oracle数据库中实体化视图刷新的机制

    oracle9i实体化视图.pdf

    oracle9i实体化视图.pdf。oracle白皮书的一个分册,介绍实体化视图的

    oracle9i实体化视图.

    实体化视图首先在 Oracle8i 中引入,是称为“概要管理”的组件 的一部分。可能您的公司已经在使用实体化视图,但只知道它的 其他名字,例如概要或聚合表。在这里我们讨论如何创建和管理 实体化视图,还讨论查询重写...

    论文研究-基于Oracle10g的实体化视图复制研究 .pdf

    基于Oracle10g的实体化视图复制研究,霍东方,,该文以分布式数据库应用为背景,介绍了运用Oracle实体化视图复制实现远程信息分布式处理的方案;详细论述了与实体化视图复制相关的��

    Oracle数据仓库实体化视图的研究与应用

    Oracle数据仓库实体化视图的研究与应用的最新成果,对研究数据仓库的DBA有很好的借鉴作用。

    Oracle数据仓库实体化视图的研究与应用.pdf

    Oracle数据仓库实体化视图的研究与应用.pdf

    Navicat Premium操作手册.7z

    3Oracle 外部表访问参数59Oracle 索引组织表59Oracle 索引组织表选项59Oracle 视图60Oracle 函数或过程61Oracle 数据库链接62Oracle 索引63Oracle Java65Oracle 实体化视图66Oracle 实体化视图日志68Oracle 包69...

    ORACLE 快照样例

    实体化视图-快照 自己调试的样例 供大家参考

    Oracle四大宝典之四:Oracle 调优入门到精通

    你所管理的Oracle系统性能是否“极好”,你的回答可能是“否”。你的系统在正常运行的情况下是否能降低资源的消耗?性能问题是Oracle系统都会碰到的问题,如何使有限的计算机系统资源为更多的用户...第16章 实体化视图

    Oracle11g从入门到精通2

    7.3.2 实体完整性 7.3.3 引用完整性 7.3.4 存储过程检查 7.3.5 使用触发器 7.4 避免更改引起的大量改动 7.4.1 使用视图 7.4.2 使用同义名 7.4.3 使用光标 第8章 数据库用户管理 8.1 授予权限 ...

    Oracle数据库管理员技术指南

    贺辞 序 前言 第1章 建立和配置...9.1.3 实体化视图 9.1.4 利用 DBMS_STATS 收集性能统计 数据 9.2 新索引类型 9.2.1 基于函数的索引 9.2.2 反向键索引 9.2.3 降序索引 9.2.4 索引编排表 9.2.5 管理索引的...

    Oracle数据库管理工具 Navicat for Oracle v15.0.19.0中文版(32/64位)

    它可以用于任何版本8i 或以上的Oracle 数据库服务器,并支持大部份Oracle 最新版本的功能,包括目录、表空间、同义词、实体化视图、触发器、序列、类型等。Navicat的功能足以符合专业开发人员的所有需求,但是对...

    网络数据库的优化毕业设计论文

    随着数据库规模的扩大,...本系统主要功能是利用oracle9i所提供的技术:分区、实体化视图和查询重写来实现数据库的性能优化:用户自己建表、视图并进行查询比较;比较是否采用优化技术和直接查询的时间,体现优化程度。

    ORACLE9i_优化设计与系统调整

    §13.6.2 创建实体视图 169 §13.6.3 使用实体视图 169 §13.6.4 管理实体视图 169 第14章 优化器(Optimizer)简介 170 §14.1 Oracle优化器 170 §14.2 SQL处理体系结构 171 §14.2.1 解析程序 171 §14.2.2 优化...

    Oracle11g从入门到精通

    7.3.2 实体完整性 7.3.3 引用完整性 7.3.4 存储过程检查 7.3.5 使用触发器 7.4 避免更改引起的大量改动 7.4.1 使用视图 7.4.2 使用同义名 7.4.3 使用光标 第8章 数据库用户管理 8.1 授予权限 8.1.1 直接...

    Oracle数据库管理工具 Navicat for Oracle v15.0.21.0中文版(32/64位)

    它可以用于任何版本8i 或以上的Oracle 数据库服务器,并支持大部份Oracle 最新版本的功能,包括目录、表空间、同义词、实体化视图、触发器、序列、类型等。Navicat的功能足以符合专业开发人员的所有需求,但是对...

    Oracle Database 11g初学者指南--详细书签版

    在过去的14年中,他与IanAbramson和MichaelCorey为OraclePress合著了一系列图书.Abbey在国际Oracle用户团体非常活跃,经常出席COLLABORATE、OraclecOpenWorld和区域性用户组会议.  Michael J.Corey是Ntirety...

    oracle学习文档 笔记 全面 深刻 详细 通俗易懂 doc word格式 清晰 连接字符串

     CONNECT:拥有Connect权限的用户只可以登录Oracle,不可以创建实体,不可以创建数据库结构。 注意: 对于普通用户:授予connect, resource权限。 对于DBA管理用户:授予connect,resource, dba权限。  授予系统...

    Navica t for Oracle数据库管理工具 v15.0.18.0中文版(32/64位)

    它可以用于任何版本8i 或以上的Oracle 数据库服务器,并支持大部份Oracle 最新版本的功能,包括目录、表空间、同义词、实体化视图、触发器、序列、类型等。Navicat的功能足以符合专业开发人员的所有需求,但是对...

Global site tag (gtag.js) - Google Analytics