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