物化视图

将视图存储为一张表,加快读取速度,但需要占用空间

手动刷新模式的物化视图

语法

默认生成的物理视图,不实时更新:

1
2
3
4
5
6
7
8
9
--创建默认(手动刷新)物理视图
create meterialized view 表名  
as
select语句 where条件

--手动更新(激活)视图,所以需要更新物理视图
BEGIN
DBMS_MVIEW.REFRESH('物理视图名''C')
END

刷新命令

窗口模式使用此命令:

命令行模式使用如下命令

自动刷新模式的雾化视图

相比手动多个两个参数:refresh和on commit

1
2
3
4
5
6
--创建自动刷新物化视图
create meterialized view 表名  
refresh
on commit
as
select语句 where条件

创建时,不生产数据的雾化视图,只有第一次“激活”以后才会有数据!(譬如前期都是试用数据,当某个时刻才“激活”)

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
--创建自动刷新物化视图,但在构建时不激活
create meterialized view 表名
build deferred  
refresh
on commit
as
select语句 where条件


--手动更新(激活)视图!若视图带有自动刷新、提交,以后就不需要激活了,仅第一次需要!
BEGIN
DBMS_MVIEW.REFRESH('物理视图名''C')
END

创建增量更新的物化视图

1.第一步,需要先创建基表的物化日志,且创建时需要有个字段作为日志基数,一般以rowid或者主键

2.第二步,才可以创建物化视图

第一步,创建物化日志,有几个基表创建几个物化日志

注:当物化日志创建完成后,tables目录树下会多一张物化日志表,用于记录基表的操作记录自动生成的表为:MLOG$_基表名

1
2
3
--第一步,物化视图有多张表就创建多个物化日志,日志以rowid为基数
create materialized view log on 基表1 with rowid;
create materialized view log on 基表2 with rowid;

第二步,创建增量更新物化视图

1
2
3
4
5
6
--创建增量物化视图,命令和其他更新的物化视图一样,仅仅就多个了日志操作
create materialized view 物化表名
refresh fast
on commit
as
select语句where条件