ITPub博客

首页 > 数据库 > Oracle > ORACLE物化视图入门

ORACLE物化视图入门

Oracle 作者:wg0411 时间:2017-04-10 10:43:28 0 删除 编辑

一  前言:

       物化视图作为sql调优的高级技术,也是进行数据仓库调优的利器之一,总而言之这个技术还是比较炫的,也是比较少的能够在老板面前露一手的技术之一,很有必要了解一番;

 

二  概念:

      视图是一个虚拟表(也可以认为是一条语句),基于它创建时指定的查询语句返回的结果集。每次访问它都会导致这个查询语句被执行一次。为了避免每次访问都执行这个查询,可以将这个查询结果集存储到一个物化视图(也叫实体化视图)。

 

三  创建的语法:

      

创建物化视图的语句

CREATE MATERIALIZED VIEW DATACHK.MV_B2B_DANWEI_R 

AS 

SELECT                                        

      "DWDM" DWDM,

       "DWMC" DWMC,

       "BYZD1" BYZD1,

       "BYZD2" BYZD2,

       "BYZD3" BYZD3,

       "BYZD4" BYZD4,

       "LastChanged" LastChanged

  FROM DANWEI;

 

四  查询物化视图:SELECT  * FROM DATACHK.MV_B2B_DANWEI_R;  查询刚才的物化视图

查看执行计划:

 

五  相关参数

在学习物化视图的时候,可能有的同学就会有疑问,如果基础表通过DML或者DDL语句进行修改时,物化视图可能会保护失效数据(如果现在对基础表新内容重新运行的话,得到的数据已经不再等于物化视图查询的结果集)。由于这个原因,在基础表发生了变更之后,必须对物化视图执行一次刷新动作,在创建的物化视图的时候,可以指定如何以及何时刷新的操作

1、何时刷新:定义当ORACLE基表发生变化时物化视图的刷新时间

  • 根据需要(ON DEMAND):物化视图会在显式请求的情况下进行刷新(可以通过手工调用,也可以通过运行按照指定的时间间隔的任务)。这意味着从基础表修改带物化视图刷新这段时间内,物化视图中可能包含失效的数据。
  • 在提交时(ON COMMIT):物化视图会在基础表修改所在的同一个事务里进行自动刷新,也就是说,物化视图总是包含最新的数据;(这种方式比较少用)

2、如何刷新:定义刷新数据的方式

  • 完全刷新:容器表的所有内容都会被删除,并且所有的数据都会从基础表重新加载。所有的物化视图都支持这种方式,但是效率较慢,一般在一部分的数据被修改后才去使用这种方式; 语句:REFRESH COMPLETE
  • 快速刷新:修改了的数据才会同步到容器表中。这种视图需要满足一定的条件,基础表上只有少数数据被变更后,用这种方式效率较快;
  • 强制刷新:最初会尝试快速刷新。如果无法快速刷新,就执行一次完全刷新。(默认的方法)
  • 永不刷新:物化视图永远不被刷新。特殊场景下使用;(如果这时候尝试创新,将会报错)

在实际的工作中一般根据实际的情况配置刷新的时间和方式

 

 

六  管理脚本

1、查看系统中所有物化视图的刷新时间

select refresh_method,refresh_mode,staleness,last_refresh_type,last_refresh_date   from user_mviews;

 

以上是物化视图简单的入门知识,请关注本博客后续还会陆陆续续介绍物化视图的更高级知识,敬请关注;

 

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

本文作者:JOHN

ORACLE技术博客:ORACLE 猎人笔记               数据库技术群:367875324 (请备注ORACLE管理 )  

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/29578568/viewspace-2136925/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2014-03-31

  • 博文量
    235
  • 访问量
    536115