个人笔记(物化视图学习笔记,有兴趣的小伙伴可以看看这个视频)
物化视图的类型:Oracle提供了两种方式,手工刷新和自动刷新,默认为手工刷新。即:ON DEMAND. ON COMMIT 二者的区别在于刷新方法的不同,ON DEMAND顾名思义,仅在该物化视图“需要“被刷新 了,才进行刷新(REFRESH),即蕈物化视图,以保证和基表数据的一致性;而ON COMMIT是 说,一旦基表有了COMMIT,即事为提交,则立刻刷新,立刻更新物化视图,使得数据和基表一 致.
创建语句: create materialized view mv_name [选项N] as select from table_name;
[选项1] **BUILD [IMMEDIATE, DEFERRED]**是否在创建视图时生成数据,默认生成、 DEFERRED为不生成数据,需要的时候生成・
[选项2] REFRESH [FAST, COMPLETE, FORCE, fast是增量刷新,或者说叫 快速刷新;complete为全表刷新;force为如果增量刷新可以使用则使用增量刷新,否则全表刷 新;never则是不进行刷新(不使用).
[选项3] ON [DEMAND, COMMIT]即手工刷新和提交时刷新。
[选项4] START WITH通知数据库完成从主表到本地表第一次复制的时间。 [选项5] NEXT说明了刷新的时间间隔,下一次刷新的时间=上一次执行完成的时间+时间间 隔。
注:一般普通账号并没有建立物化视图的权限,需要使用sysdba或者sysdba赋权的用户才可以建立物化视图
代码如下:
--全量更新,增量更新需要定义id字段,并设置为增量更新字段,根据id进行增量更新
CREATE MATERIALIZED VIEW V_AB
REFRESH FORCE ON COMMIT
AS
SELECT
A.ICr A.HAKE, B.CLSIC, B.NAME AS CLSNAME
FROM A,3
WHERE A.CLSID - B.CLSIE;
代码如下:
--也是全量更新,设置定时更新物化视图,需要设置开始日期以及下次刷新时间设置,如下下次刷新时间为明天
CREATE MATERIALIZED VIEW MV_AB
REFRESH FORCE ON DEMAND
START WITH SYSDATE
NEXT SYSDATE+1
AS
SELECT
k.lC, "NAME, B.CLSIE, B.NAME ,
FROM A,B
WHERE A.CL5ID - B.CL5IE;
代码如下:
--快速刷新fast刷新,如下为一分钟刷新一次,如下这个不是全量刷新创建了根据rowid进行增量刷新的规则,后续根据索引rowid进行增量更新
CREATE MATERIALIZED VIEW LOG ON A WITH ROWID;
CREATE MATERIALIZED VIEW LOG ON B WITH ROWID;
CREATE MATERIALIZED VIEW MV_AB
REFRESH FAST ON DEMAND
START WITH SYSDATE
NEXT SYSDATE+1/1440
AS
SELECT
A.ROWID AS AROWID, B.ROWID AS BROWID,
A.ID, A.NAME, B.CLSID, B.NAME AS CLSNAME
FROM A,B
WHERE A.CLSID = B.CLSI;
物化视图可以自动刷新也可以手动刷新,可以按照自己的需求进行选择,物化视图的创建会消耗物理内存,能够在user_table表中查到具体存储的表,这样的好处在于调用视图时不用每次都进行逻辑取数,而是直接从表中取数。