物化视图(Materialized Views)

物化视图概述

物化视图是查询结果被提前存储和或物化的模式对象。在FROM字句后可以是表、视图或物化视图,通常称之为主表。物化视图常用与数据同步、汇总、分发、计算等应用场景。

物化视图结构
基本语法:
CREATE MATERIALIZED VIEW [view_name] REFRESH [force|fast|complete|never] on [demand|commit] AS SELECT…..

物化视图特征

物化视图与普通视图和索引有些类似的地方。物化视图主要在以下几点与索引类似:
- 它们包含实际数据,并占用存储空间
- 当其主表更新时,物化视图也能被更新
- 它用于查询重写操作,都可以提高SQL性能
- 他们的存在对SQL应用程序和用户是透明的

物化视图图也类似于非物化视图,因为他也呈现其他表和试图的数据。与索引不同的是用户可以直接SELECT语句查询物化视图并且物化视图不受主表丢失的影响。物化视图也可以用DML语句更新,取决于刷新类型。
物化视图可以进行分区,可以在一个分区表上定义一个物化视图,并在该视图上创建一个或多个索引。

物化视图刷新

在主表的数据更新后,数据库通过刷新物化视图来对其进行维护。

刷新方法可以是增量刷新(快速刷新)或者完全刷新。在创建时参数可以指定为fast(快速刷新)、complete(完全刷新)、force(默认值,判断能否进行快速刷新,不能则采用完全刷新)、never(不进行刷新)。

当物化视图定义时为BUILD IMMEDIATE,会发生完全刷新。除非物化视图引用了一个预建表。刷新涉及执行物化视图定义的查询。此过程可能很慢,尤其是在当数据库必须读取和处理大量的数据时。
快速刷新避免了重新生成物化视图,因此处理起来会非常快。快速刷新方法是由物化视图日志或直接加载器来记录主表的变更。物化视图日志基于ROWID来记录主表数据变更的模式对象以便增量刷新物化视图,每个物化视图日志与单个主表相关联,一般处于同一个数据库和Schema下。

CREATE MATERIALIZED VIEW LOG ON [table_name] WITH ROWID

物化视图刷新类型分为两种ON DEMAND和ON COMMIT两种。ON DEMAND则表示在需要时刷新物化视图,ON COMMIT则表示在主表事务提交后自动刷新。当物化视图采用了dblink则无法使用ON COMMIT。

当采用ON DEMAND创建物化视图时,物化视图无法自动刷新。我们可以通过下面三种方式来指定刷新时间点:

1、在创建时指定下次的刷新时间

create meterialized view mv_view refresh force on demand 
start with sysdate next sysdate+1 as select ......

2、通过调用DBMS_REFRESH

BEGIN DBMS_REFRESH.MAKE( 
NAME=>'AUTO_REMV'
LIST=>'MV_EMP' 
NEXT_DATE=>'SYSDATE' 
END 
/

3、创建JOB任务调用DBMS_MVIEW.REFRESH

EXEC DBMS_MVIEW.REFRESH('MV_EMP')

采用ON COMMIT时物化视图会自动刷新,但需要注意的是主表需要有主键,没有主键也无法创建ON COMMIT类型的物化视图。

删除物化视图

DROP METERIALIZED VIEW MV_EMP;
  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值