特点:正常情况下,如果基表不存在,创建视图就会失败。但是可以使用 force选项强制创建视图(前提是创建视图的语句没有语法错误),但此时该视图处于失效状态,调用会出错,直到这个基表已经存在
create or replace FORCE view view_test as select * from myemp;
select * from (select e.*,rownum rn from emp e) tab where rn>=5
and rn<=10;
其中: select e.*,rownum rn from emp e 就是一个内嵌视图,临时有效
物化视图简单理解就是一张特殊的物理表,预先计算并保存表连接或统计中需要耗时较多的操作的结果。物化视图也称为”快照”物化视图可以定时更新视图中的数据,对于大量数据统计查询后得出的小量结果集这种情况比较适合。物化视图可以查询表,视图和其它的物化视图我们可以通过 user_segments 查看用户创建对象所在资源情况 select * from user_segments
创建物化视图语法create materialized view [mv_name]
[
tablespace [ts_name] -- 指定表空间
build [immediate|deferred] -- 创建时是否产生数据
refresh [fast|complete|force] -- 快速、完全刷新
[on commit|on demand start with (start_time) next (next_time)] -- 刷新方式
[with {primary key |rowid}] --快速刷新时候唯一标示一条记录
{enable|disabled} query rewrite – 是否查询重写
]
as {select_statement};
eg1:
create materialized view my_view
build immediate
refresh fast on commit
with rowid
as
select empno,ename,sal from emp where sal>=3000;
eg2:
create materialized view my_view
build immediate
refresh
on commit
enable query rewrite
as
select deptno,count(*) amount from myemp group by deptno;
eg3:
create materialized view my_view
refresh
start with sysdate next sysdate+1/48
with rowid
as
select count(*),avg(sal+nvl(comm,0)) sals from myemp;
构建一个创建时产生数据,快速刷新【限制比较多】,刷新方式为 on commit,快速刷新是唯一标示为 rowid 的案例
create materialized view my_view
build immediate
refresh fast on commit
with rowid
as
select empno,ename,sal from emp where sal>=3000;
Rowid 物化视图只有一个单一的主表,不能包括下面任何一项:
Distinct 或者聚合函数.
Group by,子查询,连接和 SET 操作
构建一个创建时产生数据,默认刷新,刷新方式为 on commit,刷新是唯一标示为 rowid,支持重写的案例
create materialized view my_view
build immediate refresh on commit enable query rewrite as
select deptno,count(*) amount from myemp group by deptno;
注意:包含聚集,group by 不能创建快速刷新
创建一个定时提交的物化视图
create materialized view log on emp with rowid
create materialized view my_view refresh start with sysdate next
sysdate+1/48 with rowid
as
select count(*),avg(sal+nvl(comm,0)) sals from myemp;
使用聚合函数和分组时,不能使用快速刷新模式,该案例使用的是默认刷新方式
6、作用1)实现两个数据库之间的数据同步,可以存在时间差
2)如果是远程链接数据库的场景时,提高查询速度(由于查询逻辑复杂,数据量比较大,导致每次查询视图的时候,查询速度慢,效率低下)
分类:
1)包含聚集的物化视图
2)只包含连接的物化视图
3)嵌套物化视图
注: 无论哪种视图,都需要设置物化视图的创建方式、 查询重写、 刷新方式等
几个方面的功能选项
创建方式(Build Methods)
build immediate:是在创建物化视图的时候就生成数据。默认为build immediate
build deferred:是在创建时不生成数据,以后根据需要在生成数据
查询重写(query rewrite)