将视图存储为一张表,加快读取速度,但需要占用空间
手动刷新模式的物化视图
语法
默认生成的物理视图,不实时更新:
| --创建默认(手动刷新)物理视图
create meterialized view 表名
as
select语句 where条件
--手动更新(激活)视图,所以需要更新物理视图
BEGIN
DBMS_MVIEW.REFRESH('物理视图名','C')
END
|
刷新命令
窗口模式使用此命令:
命令行模式使用如下命令
自动刷新模式的雾化视图
相比手动多个两个参数:refresh和on commit
| --创建自动刷新物化视图
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$_基表名
| --第一步,物化视图有多张表就创建多个物化日志,日志以rowid为基数
create materialized view log on 基表1 with rowid;
create materialized view log on 基表2 with rowid;
|
第二步,创建增量更新物化视图
| --创建增量物化视图,命令和其他更新的物化视图一样,仅仅就多个了日志操作
create materialized view 物化表名
refresh fast
on commit
as
select语句where条件
|