一、物化视图语法
CREATE MATERIALIZED VIEW 名字
[refresh [fast|complete|force]
[on demand | commit]
[start with date] [next date]
[with {primary key|rowid}]]
AS
select语句
二、各参数意义
1)refresh 刷新模式
fast :可以理解为增量模式,每次将新加入得数据插入视图中,这个模式下必须有MATERIALIZED view log。
complete:完全刷新,可以理解为把原来的数据删除了再重新加进来。
force:如果增量刷新可用Oracle将完成增量刷新,否则将完成完全刷新,如果不指定刷新方法(FAST, COMPLETE, or FORCE),Force选项是默认选项
2)on demand|commit
demand:手动刷新
commit:当原表提交时候就刷新
3) [start with date] [next date]
按照时间刷新,start with date是起始刷新时间,next date是刷新时间间隔
4) [with {primary key|rowid}]]
基于主键还是基于rowid的。
三、测试物化视图
创建基表
create table a (a1) as select rownum from dba_objects
查询基表中数据
select count(*) from a
测试on demand|commit
CREATE MATERIALIZED VIEW a_m1
REFRESH complete
on demand
with rowid
AS SELECT * FROM a
CREATE MATERIALIZED VIEW a_m2
REFRESH complete
on commit
with rowid
AS SELECT * FROM a
select count(*) from a_m1
50318
select count(*) from a_m2
50318
现在a_m1,a_m2两个中数量相同
a插入1条数据
insert into a values(50319)
再次查寻两个视图
select count(*) from a_m1
50318
select count(*) from a_m2
50319
尝试手动刷新物化视图
EXEC DBMS_MVIEW.REFRESH('a_m1');
select count(*) from a_m1
50319
select count(*) from a_m2
50319
刷新正常
下面测试fast|complete
由于fast要创建物化日志
CREATE MATERIALIZED VIEW log on a
(提示要创建主键)
CREATE MATERIALIZED VIEW a_m3
REFRESH complete
on demand
with rowid
AS SELECT * FROM a
CREATE MATERIALIZED VIEW a_m4
REFRESH fast
on demand
AS SELECT * FROM a
插入一条数据
刷新视图
EXEC DBMS_MVIEW.REFRESH('a_m3');
用时7s+
刷新视图
EXEC DBMS_MVIEW.REFRESH('a_m4');
用时0.3s
另外基于时间点自动刷新就先不测试了。
查询视图dba_mview
dba_m开头的一堆~~~没有细致看
另外想查看一下log日志,结果发现差不了
SELECT * FROM MLOG$_T;
,不知道为啥
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/9524377/viewspace-630993/ ,如需转载,请注明出处,否则将追究法律责任。