Oracle-物化视图

介绍:oracle物化视图是包括一个查询结果的数据库对象,它是远程数据的的本地副本,或者用来生成基于数据表求和的汇总表。物化视图存储基于远程表的数据,也可以称为快照。对于复制,物化视图允许你在本地维护远程数据的副本,这些副本是只读的。如果你想修改本地副本,必须用高级复制的功能。当你想从一个表或视图中抽取数据时,你可以用从物化视图中抽取。对于数据仓库,创建的物化视图通常情况下是聚合视图,单一表聚合视图和连接视图。物化视图可以查询表,视图和其它的物化视图。

1 关于物化视图日志

查询物化视图日志文件格式:desc mlog$_test;

创建物化视图时默认指定物化视图中存在主键,如果不指定,那么创建的物化视图日志文件的基表必须存在主键,否则会报错

Demo:对一个表test

创建日志:create materialized view log on test;

那么会报:表'TEST'不包含主键约束条件

这种情况下,就必须指定日志文件结构

比如:create materialized view log on test with rowid

2关于生成数据和刷新

2.1 生成数据

两大选项:build immediate build deferred

Build immediate:在创建物化视图的同时根据主表生成数据

Bulid deferred:在创建物化视图的同时,在物化视图内不生成数据,如果此时没有生成数据,以后可以利用oracle自带的过程进行相应的调用,采取:EXEC DBMS_MVIEW.Refresh(‘MV_name’,’C’),注意必须使用全量刷新,默认(不带参数)是增量刷新,所以这里参数必须是C,因为之前都没有生成数据,所以必须全量。

2.2 关于刷新

2.2.1刷新方式:complete fast force

Complete :完全刷新整个物化视图,相当于重新生成物化视图,此时即时增量刷新可用也全量刷新

l Fast:当有数据更新时依照相应的规则对物化视图进行更新(此时必须创建物化视图日志(物化视图日志记录了数据更新的日志),关于日志的说明,参照“物化视图日志文件介绍”)

l Force:当增量刷新可用则增量刷新,当增量刷新不可用,则全量刷新(此项为默认选项)不过从实际情况出发,应该尽量不使用默认选项,可以考虑使用增量刷新,对大表特别有效,大表全量更新速度是非常慢的,特别是在存在索引的情况下(在创建物化视图语句中,可能某些限制查询的条件,导致了增量刷新无法使用,这个是需要注意的,具体是哪类语句导致fast刷新不可用,有待总结…..)

2.2.2刷新时间:on demand on commit start with/ next

On demand:在需要刷新时进行刷新(人工判断)

On commit:在基表上有提交操作时,进行更新

Start with:指定首次刷新的时间(一般指定的是当前时间,不过也可以在创建物化视图时不生成数据,则可以考虑在指定的时间刷新,从而生成数据)

Next:刷新的周期时间

3 基于主键的物化视图和ROWID的物化视图的说明

创建物化视图日志时,指定了记录更新的原则即with 后面的primary 或者rowid 或者object id等等,后面,默认是以primary key为记录更新,在物化视图内也是以此为更新的原则。

4 关于物化视图存放的的表空间

直接在创建物化视图时指定日志存放的表空间和物化视图的表空间。

例子:create materialized view MV_TEST tablespace test ----表空间名称

5 关于查询重写和更新

在创建查询重写时,基表中必须有主键约束,视图里是无法创建主键的,不过其继承了基表的主键约束。(关于视图的创建的一些技巧有待总结……)下面给个例子

Create materialized view MVTEST

Refresh fast ----前提是必须创建基表日志,可以忽略该项

Enable query rewrite ----前提是基表上必须存在主键约束

As

Select * from TEST; ----物化视图数据生成

6 关于创建物化视图的例子

6.1 使用增量刷新的物化视图的写法

创建物化视图日志,必须创建日志

Create materialized view log on TEST ----TEST为表名

----注:(TEST为表名或者视图名,关于视图上建立物化视图,见基于视图的物化视图

----创建物化视图语句:

Create materialized view MVTEST

----MVTEST为物化视图名

Build immediate

----创建时生成数据对应的是build deferred

Refresh fast

----增量刷新

On commit

----在基表有更新时提交,这里该句对视图无效

With rowid

----这里创建基于rowid的物化视图,对应的是 primary key

As

Select * from TEST;

----生成物化视图数据语句

SQL> create materialized view mvtest build immediate refresh fast on commit as select * from test;

Oracle-物化视图

介绍:oracle物化视图是包括一个查询结果的数据库对象,它是远程数据的的本地副本,或者用来生成基于数据表求和的汇总表。物化视图存储基于远程表的数据,也可以称为快照。对于复制,物化视图允许你在本地维护远程数据的副本,这些副本是只读的。如果你想修改本地副本,必须用高级复制的功能。当你想从一个表或视图中抽取数据时,你可以用从物化视图中抽取。对于数据仓库,创建的物化视图通常情况下是聚合视图,单一表聚合视图和连接视图。物化视图可以查询表,视图和其它的物化视图。

1 关于物化视图日志

查询物化视图日志文件格式:desc mlog$_test;

创建物化视图时默认指定物化视图中存在主键,如果不指定,那么创建的物化视图日志文件的基表必须存在主键,否则会报错

Demo:对一个表test

创建日志:create materialized view log on test;

那么会报:表'TEST'不包含主键约束条件

这种情况下,就必须指定日志文件结构

比如:create materialized view log on test with rowid

2关于生成数据和刷新

2.1 生成数据

两大选项:build immediate build deferred

Build immediate:在创建物化视图的同时根据主表生成数据

Bulid deferred:在创建物化视图的同时,在物化视图内不生成数据,如果此时没有生成数据,以后可以利用oracle自带的过程进行相应的调用,采取:EXEC DBMS_MVIEW.Refresh(‘MV_name’,’C’),注意必须使用全量刷新,默认(不带参数)是增量刷新,所以这里参数必须是C,因为之前都没有生成数据,所以必须全量。

2.2 关于刷新

2.2.1刷新方式:complete fast force

Complete :完全刷新整个物化视图,相当于重新生成物化视图,此时即时增量刷新可用也全量刷新

l Fast:当有数据更新时依照相应的规则对物化视图进行更新(此时必须创建物化视图日志(物化视图日志记录了数据更新的日志),关于日志的说明,参照“物化视图日志文件介绍”)

l Force:当增量刷新可用则增量刷新,当增量刷新不可用,则全量刷新(此项为默认选项)不过从实际情况出发,应该尽量不使用默认选项,可以考虑使用增量刷新,对大表特别有效,大表全量更新速度是非常慢的,特别是在存在索引的情况下(在创建物化视图语句中,可能某些限制查询的条件,导致了增量刷新无法使用,这个是需要注意的,具体是哪类语句导致fast刷新不可用,有待总结…..)

2.2.2刷新时间:on demand on commit start with/ next

On demand:在需要刷新时进行刷新(人工判断)

On commit:在基表上有提交操作时,进行更新

Start with:指定首次刷新的时间(一般指定的是当前时间,不过也可以在创建物化视图时不生成数据,则可以考虑在指定的时间刷新,从而生成数据)

Next:刷新的周期时间

3 基于主键的物化视图和ROWID的物化视图的说明

创建物化视图日志时,指定了记录更新的原则即with 后面的primary 或者rowid 或者object id等等,后面,默认是以primary key为记录更新,在物化视图内也是以此为更新的原则。

4 关于物化视图存放的的表空间

直接在创建物化视图时指定日志存放的表空间和物化视图的表空间。

例子:create materialized view MV_TEST tablespace test ----表空间名称

5 关于查询重写和更新

在创建查询重写时,基表中必须有主键约束,视图里是无法创建主键的,不过其继承了基表的主键约束。(关于视图的创建的一些技巧有待总结……)下面给个例子

Create materialized view MVTEST

Refresh fast ----前提是必须创建基表日志,可以忽略该项

Enable query rewrite ----前提是基表上必须存在主键约束

As

Select * from TEST; ----物化视图数据生成

6 关于创建物化视图的例子

6.1 使用增量刷新的物化视图的写法

创建物化视图日志,必须创建日志

Create materialized view log on TEST ----TEST为表名

----注:(TEST为表名或者视图名,关于视图上建立物化视图,见基于视图的物化视图

----创建物化视图语句:

Create materialized view MVTEST

----MVTEST为物化视图名

Build immediate

----创建时生成数据对应的是build deferred

Refresh fast

----增量刷新

On commit

----在基表有更新时提交,这里该句对视图无效

With rowid

----这里创建基于rowid的物化视图,对应的是 primary key

As

Select * from TEST;

----生成物化视图数据语句

SQL> create materialized view mvtest build immediate refresh fast on commit as select * from test;

转载于:https://blog.51cto.com/zhangdivy/953905

Oracle-物化视图相关推荐

  1. oracle 物化视图、中间表的方案

    物化视图 有个项目因为有比较多的查询汇总,考虑到速度,所以使用了物化视图.简单的把用到的给整理了下.先看简单创建语句: create materialized view mv_materialized ...

  2. Oracle物化视图的创建及使用(一

    Oracle物化视图的创建及使用  http://blog.csdn.net/tegwy/article/details/8935058  先看简单创建语句: create   materialize ...

  3. Oracle物化视图的简单使用

    最近有个项目因为有比较多的查询汇总,之前用的是oralce的临时表,但临时表的特性导致无法完成业务需求,所以使用了物化视图. 先看简单创建语句: //创建物化视图 create materialize ...

  4. Oracle物化视图与物化视图日志

    文章目录 物化视图 物化视图与普通视图的区别 创建一个存放person的表 创建一个存放person的address的表 初始化数据 创建物化视图的语句 1.build [immediate|defe ...

  5. Oracle——物化视图

    文章目录 含义 物化视图的语法 物化视图的创建 1.自动刷新的物化视图 ON COMMIT 2.非自动刷新的物化视图 ON demand 关于手动刷新 物化视图的删除 资料参考 含义 什么是物化视图? ...

  6. oracle 物化视图没效果,Oracle物化视图失效的几种情况及测试

    物化视图(Materialized Views)是查询的结果集,所有原表和视图的变更都将导致物化视图的失效,最近就发现了一个物化视图经常失 说明:物化视图(Materialized Views)是查询 ...

  7. oracle物化视图视频,Oracle物化视图使用详解视频教程

    课程目标 深刻理解Oracle物化视图的原理和应用场景,熟练通透地掌握物化视图的创建.刷新方式.物化视图日志.查询重写以及开发技巧. 适用人群 Oracle数据库工程师.Oracle DBA 课程概述 ...

  8. oracle 物化视图的自动刷新方法

    oracle 物化视图的自动刷新方法: 方法1,直接在创建的时候,指定start with ,如下代表每分钟执行1次 create materialized view big_table_mv nol ...

  9. Oracle物化视图优化多表查询速度

    近期项目中遇到有关报表查询sql速度过慢的问题,由于sql是多个表相关联的查询结果,并且数据量过大,所以导致查询速度过慢.为此,采用物化视图来提高查询速度. 1.物化视图概述 物化视图是包括一个查询结 ...

  10. oracle 物化视图使用,ORACLE 物化视图使用

    当前位置:我的异常网» 数据库 » ORACLE 物化视图使用 ORACLE 物化视图使用 www.myexceptions.net  网友分享于:2013-08-18  浏览:20次 ORACLE ...

最新文章

  1. Google又放大招:高效实时实现视频目标检测 | 技术头条
  2. 近年ERP软件公司腾飞的缘由
  3. Java 线程 — ThreadPoolExecutor
  4. ASP.NET中进行消息处理(MSMQ) 三
  5. 【转载】性能测试浅谈
  6. 如何成为公司独当一面的工程师
  7. 不需要的系统垃圾把它杀掉!
  8. 你的喜爱——软件测试方法和技术
  9. ECShop 批量打印快递单
  10. 2020-05-08 工作中英语单词积累
  11. android 新建桌面文件夹在哪里,添加并管理桌面文件夹
  12. 小学计算机教室培训心得,小学教师培训心得体会【通用版】
  13. 非常好用且快速的Youtube下载命令行工具yt-dlp
  14. 【用法总结】C++中常用的大小写转换(4种常用方法)
  15. Java XXE 漏洞
  16. 【论文随笔5】Context-Aware Transformer Transducer for Speech Recognition
  17. STM32H7 DMA USART空闲中断接收不定长数据
  18. Java十年 十大组织 写在2005
  19. python画气泡图(4个象限)
  20. 在你最穷的时候,是怎么翻身的?

热门文章

  1. python2版本异常_Python to.exe引发异常:此项目的版本控制需要sdisttarb
  2. java 集合modcount_源码|jdk源码之LinkedList与modCount字段
  3. 网络服务器分为文件服务器通信服务器和,近代中国落后、贫困的根本原因是()...
  4. 计算机控制面板图标显示,Win8桌面如何有计算机/控制面板图标
  5. MySQL 学习一:新手一学就会,MySQL 零基础增删改查简单入门教程
  6. C/C++课程设计 新生入学管理系统(二)
  7. springmvc配置MappingJackson2HttpMessageConverter实现属性驼峰和下划线的转换
  8. android执行main函数,AndroidStudio执行main方法报错
  9. 0 179 90 150matlab,matlab成功的函数拟合方法_更新中
  10. C++编译时多态和运行时多态