一. 理论部分

Oracle的物化视图是包括一个查询结果的数据库对像,它是远程数据的的本地副本,或者用来生成基于数据表求和的汇总表。物化视图存储基于远程表的数据,也可以称为快照。

Oracle的物化视图提供了强大的功能,可以用于预先计算并保存表连接或聚集等耗时较多的操作的结果,这样,在执行查询时,就可以避免进行这些耗时的操作,而从快速的得到结果。物化视图有很多方面和索引很相似:使用物化视图的目的是为了提高查询性能;物化视图对应用透明,增加和删除物化视图不会影响应用程序中SQL语句的正确性和有效性;物化视图需要占用存储空间;当基表发生变化时,物化视图也应当刷新。

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

通常情况下,物化视图被称为主表(在复制期间)或明细表(在数据仓库中)。

对于复制,物化视图允许你在本地维护远程数据的副本,这些副本是只读的。如果你想修改本地副本,必须用高级复制的功能。当你想从一个表或视图中抽取数据时,你可以用从物化视图中抽取。

对于数据仓库,创建的物化视图通常情况下是聚合视图,单一表聚合视图和连接视图。

在复制环境下,创建的物化视图通常情况下主键,rowid,和子查询视图。

REFRESH 子句

[refresh [fast|complete|force]

[on demand | commit]

[start with date] [next date]

[with {primary key|rowid}]]

默认情况下,如果没指定刷新方法和刷新模式,则Oracle默认为FORCE和DEMAND。

物化视图可以分为以下三种类型:包含聚集的物化视图;只包含连接的物化视图;嵌套物化视图。三种物化视图的快速刷新的限制条件有很大区别,而对于其他方面则区别不大。创建物化视图时可以指定多种选项,下面对几种主要的选择进行简单说明:

创建方式(Build Methods):包括BUILD IMMEDIATE和BUILD DEFERRED两种。BUILD IMMEDIATE是在创建物化视图的时候就生成数据,而BUILD DEFERRED则在创建时不生成数据,以后根据需要在生成数据。默认为BUILD IMMEDIATE。

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

刷新(Refresh):指当基表发生了DML操作后,物化视图何时采用哪种方式和基表进行同步。刷新的模式有两种:ON DEMAND和ON COMMIT。

ON DEMAND和ON COMMIT物化视图的区别在于其刷新方法的不同,ON DEMAND指物化视图在用户需要的时候进行刷新,可以手工通过DBMS_MVIEW.REFRESH等方法来进行刷新,也可以通过JOB定时进行刷新,即更新物化视图,以保证和基表数据的一致性;而ON COMMIT是说,一旦基表有了COMMIT,即事务提交,则立刻刷新,立刻更新物化视图,使得数据和基表一致。

对基表,平常的COMMIT在0.01秒内可以完成,但在有了ON COMMIT视图后,居然要6秒。速度减低了很多倍。ON COMMIT视图对基表的影响可见一斑。

刷新的方法有四种:FAST、COMPLETE、FORCE和NEVER。

1. FAST:增量刷新用物化视图日志来发送主表已经修改的数据行到物化视图中.如果指定REFRESH FAST子句,那么应该对主表创建物化视图日志,故当用FAST选项创建物化视图,必须创建基于主表的视图日志。

SQL> CREATE MATERIALIZED VIEW LOG ON emp;

Materialized view log created.

对于增量刷新选项,如果在子查询中存在分析函数,则物化视图不起作用。

2. COMPLETE:刷新对整个物化视图进行完全的刷新。

3. FORCE:当指定FORCE子句,如果增量刷新可用Oracle将完成增量刷新,否则将完成完全刷新,如果不指定刷新方法(FAST, COMPLETE, or FORCE),Force选项是默认选项。

4. NEVER:指物化视图不进行任何刷新。默认值是FORCE ON DEMAND。

在建立物化视图的时候可以指定ORDER BY语句,使生成的数据按照一定的顺序进行保存。不过这个语句不会写入物化视图的定义中,而且对以后的刷新也无效。

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

可以指明ON PREBUILD TABLE语句将物化视图建立在一个已经存在的表上。这种情况下,物化视图和表必须同名。当删除物化视图时,不会删除同名的表。这种物化视图的查询重写要求参数QUERY_REWRITE_INTEGERITY必须设置为trusted或者stale_tolerated。

物化视图可以进行分区。而且基于分区的物化视图可以支持分区变化跟踪(PCT)。具有这种特性的物化视图,当基表进行了分区维护操作后,仍然可以进行快速刷新操作。对于聚集物化视图,可以在GROUP BY列表中使用CUBE或ROLLUP,来建立不同等级的聚集物化视图。

主键和ROWD子句:WITH PRIMARY KEY选项生成主键物化视图,也就是说物化视图是基于主表的主键,而不是ROWID(对应于ROWID子句). PRIMARY KEY是默认选项,为了生成PRIMARY KEY子句,应该在主表上定义主键,否则应该用基于ROWID的物化视图.

主键物化视图允许识别物化视图主表而不影响物化视图增量刷新的可用性。

Rowid物化视图只有一个单一的主表,不能包括下面任何一项:

1.  Distinct 或者聚合函数.

2. Group by,子查询,连接和SET操作

oracle视频教程请关注:http://u.youku.com/user_video/id_UMzAzMjkxMjE2.html

转载于:https://blog.51cto.com/19880614/1200659

oracle技术之Oracle 物化视图(一)相关推荐

  1. Oracle 如何根据物化视图日志快速刷新物化视图 (不积跬步,无以至千里)

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

  2. oracle雾化试图_Oracle 物化视图 说明

    一.    物化视图概述 Oracle的物化视图是包括一个查询结果的数据库对像,它是远程数据的的本地副本,或者用来生成基于数据表求和的汇总表.物化视图存储基于远程表的数据,也可以称为快照. 物化视图可 ...

  3. Oracle 11g 通过创建物化视图实现不同数据库间的表数据同步

    Oracle 11g 物化视图语法如下: create materialized view [view_name] refresh [fast|complete|force] [ on [commit ...

  4. oracle雾化试图_ORACLE物化视图具体解释

    一.物化的一般使用方法物化视图是一种特殊的物理表,"物化"(Materialized)视图是相对普通视图而言的.普通视图是虚拟表,应用的局限性大,不论什么对视图的查询,oracle ...

  5. 傅老师课堂:Oracle高级应用之物化视图(materialized view)

    原文地址:http://hi.baidu.com/gukeming888/blog/item/2682f69481c8237154fb9662.html 物化视图 (Materialized View ...

  6. oracle雾化试图_Oracle物化视图语法

    物化视图概述: Oracle的物化视图提供了强大的功能,可以用在不同的环境中.在不同的环境中,物化视图的作用也不相同.数据仓库中的物化视图主要用于预先计算并保存表连接或聚集等耗时较多的操作的结果,这样 ...

  7. oracle技术之Oracle 跟踪事件(一)

    一.Oracle跟踪文件 Oracle跟踪文件分为三种类型,一种是后台报警日志文件,记录数据库在启动.关闭和运行期间后台进程的活动情况,如表空间创建.回滚段创建.某些alter命令.日志切换.错误消息 ...

  8. oracle including new values,物化视图日志加不加INCLUDING NEW VALUES有什么影响

    满意答案 ap.jil 2016.06.30 采纳率:58%    等级:9 已帮助:213人 NEW VALUES Clause The NEW VALUES clause lets you det ...

  9. oracle+技术面试,Oracle面试问题 技术篇

    <Oracle面试问题 技术篇>由会员分享,可在线阅读,更多相关<Oracle面试问题 技术篇(3页珍藏版)>请在人人文库网上搜索. 1.Oracle面试问题 技术篇 这也许是 ...

最新文章

  1. 一文概览深度学习中的激活函数
  2. Flag counter被博客园禁了的解决方法
  3. 利用html 5 websocket做个山寨版web聊天室(手写C#服务器)
  4. 这就是数据分析之数据变换
  5. Hector代码笔记
  6. Gauss-Jordan法求逆矩阵
  7. Excel催化剂开源第4波-ClickOnce部署要点之导入数字证书及创建EXCEL信任文件夹
  8. 隋政军---将木屋烧烤打造成中国领先的烧烤品牌
  9. android修改ipv4,Android 设置ipv4优先策略访问网络
  10. 屏幕录制专家,如何上传到优酷的高清视频?
  11. 阿里巴巴CTO行癫:阿里双11是世界互联网技术的超级工程
  12. c++中new是否会自动初始化
  13. 咖说 | 新基建中区块链的位置:基础设施的基础技术
  14. 时序预测 | MATLAB实现基于EMD-LSTM时间序列预测(EMD分解结合LSTM长短期记忆神经网络)
  15. simulink-他励直流电动机的直接启动仿真
  16. 时空位置大数据AI平台技术实现架构设计
  17. tkinter UI界面模板
  18. 关于CEGUI的几点不解
  19. 【汇正财经】大盘震荡收涨
  20. 【Python数据结构系列】☀️《树与二叉树-基础知识》——知识点讲解+代码实现☀️

热门文章

  1. eclipse安装web插件、安装centos版本的idea
  2. 学校计算机房 作文,第一次去机房作文
  3. BASE64Encoder及BASE64Decoder的正确用法
  4. python可变类型与不可类型
  5. 数据结构--Go 语言中 Set 的最佳实现方案
  6. 用手写一个工具的过程讲清楚Go反射的使用方法和应用场景
  7. [翻译]PHP中define()和const定义常量的区别
  8. J.U.C之并发工具类:Exchanger
  9. 关于snowflake算法的几个问题
  10. 关于Mybatis的几个问题