首页 > 数据库 >Oracle 物化视图

Oracle 物化视图

时间:2022-11-05 13:00:30浏览次数:40  
标签:Log 视图 物化 MV rowid 刷新 Oracle

1、介绍

  视图( View ):一段通过查询语句,将一个或多个源表的关注字段组合在一起的虚表,视图本身并不储存数据;每次查询视图,都会执行视图的select语句。

  物化视图( Materialized View ):物化视图,相当于一个实表,Table中可以查询到,会存储源表的数据,通过一定的机制进行数据刷新;每次查询物化视图,相当于从普通表中select

  由此可见,视图牺牲速度换空间,物化视图牺牲空间换速度。

2、创建物化视图

  物化视图名正常带有MV字眼,这是约定俗成的

  创建语句如下,黄色部分为可选参数

create materialized view XX_MV_SYNC_PTS_WIP
build immediate
refresh force on demand
start with sysdate next sysdate+1
with primary key
as
select 语句!

  可选参数说明

  build:创建MV时是否立即刷新

build immediate(默认):创建立即刷新
build deferred:延迟刷新,刚创建不会刷新

  refresh:刷新方式

fast:快速刷新,需要创建MV Log,适合简单查询
complete:完全刷新
force(默认):自己判断进行fast还是complete 

  on:刷新模式

ON demand(默认):手动刷新,可定义刷新频率进行自动刷新
ON commit:主表commit就自动刷新

  补充:手动刷新方式

begin
    dbms_mview.refresh('XX_MV_SYNC_PTS_WIP','C');
end;
‘C’:代表complete刷新

  start with:刷新频率

start with sysdate next sysdate+1:创建物化视图的时候立即刷新,并一天刷新一次
start with sysdate next sysdate+1/24:创建物化视图的时候立即刷新,并一小时刷新一次

  with:为MV选定唯一标识

with primary key(默认):将源表主键作为唯一标识,需要select源主表所有主键字段
with rowid:将源表rowid作为唯一标识,MV的Select语句里带有聚合函数,必须使用rowid

 

3、创建MV Log

  MV Log:记录源表的增删改动作,为MV提供快速刷新依据,记住MV Log是基于源表的,不是基于MV的

  如果MV的刷新方式选择了fast,需要创建源表的MV Log。

  创建语句:

create materialized view log on 源表 with [rowid || primary key]

  (需要注意,MV的语句需要包含所需源表的rowid 或者 primary key,这样和MV Log才可以一一对应到)

  MV LOG也是一个表,在Table中可以查询到

  参数说明:

  with:同上,为MV Log选定唯一标识。

  写个wit rowid的例子(先创建MV Log,再创建MV)

create materialized view log on tb1 with rowid;
create materialized view log on tb2 with rowid;

create materialized view mv_wip
refresh fast on commit
with rowid
as
select tb1.rowid, tb2.rowid
from tb1, tb2

  以上,为物化视图的简单介绍!

  欢迎大家留言讨论。

 

  

 

标签:Log,视图,物化,MV,rowid,刷新,Oracle
From: https://www.cnblogs.com/wskxy/p/16859996.html

相关文章