Oracle数据库的视图和物化视图

视图:  view

虚拟的表格,不会占用磁盘空间,是一个sql语句运行的结果。

创建的语法:

create  view  视图名字  as  select 查询语句;

create view sal3 as

select ename,sal,deptno from

(select a.*,rownum r from

(select * from emp_4 order by sal desc) a) b

where r<=3;

select * from sal3;

所以 sal3 就是上面的那个select语句。

视图的优点和缺点:

1.可以将很长的sql语句变成一个视图的名字,来简化的日常的sql

2.使用视图进行表格数据的传递,添加with read only防止别人对表格数据做修改

3.使用视图传递数据,可以隐藏一些敏感字段

4.视图可以节省服务器的网络流量

视图的查询,可能会导致句子写起来很简单,但是内部的逻辑非常的复杂,如果这个句子运行速度很慢,没有办法去对这个数据进行优化。

物化视图:  materialized  view

也叫做 快照表,保存某个表格在某个时间点的数据,并且可以在当前的物化视图上去设置表格数据更新的规则。

刷新表格数据的方法:

complete  完全更新

fast  快速更新

force  默认的更新方式,相当于fast

1.实时更新的物化视图    on  commit

create  materialized  view  物化视图名字

refresh  complete|fast  on  commit

as

select 查询语句;

create materialized view mv_emp

refresh complete on commit

as

select deptno,sum(sal) s from emp_test group by deptno;

快速更新,要求表格要有主键,要有实体化日志信息,查询结果要包含主键字段,不能做复杂的计算和查询。

create materialized view mv_emp2

refresh fast on commit

as

select empno,sal from emp_test;

 

alter table emp_test add constraints pk_no primary key (empno);

 

解决方法,给原表添加一个实体化日志:

create  materialized  view  log  on  emp_test;

2.定时更新的物化视图    on  demand

create  materialized  view  物化视图名字

refresh  complete|fast  on  demand

start  with  开始计时的时间点  next  更新数据的时间点

as

select 查询语句;

create materialized view mv_emp3

refresh complete on demand

start with sysdate next trunc(sysdate+1,'dd')+10/24

as

select deptno,avg(sal) from emp_test group by deptno;

视图和物化视图的区别?

1.视图是虚拟的,物化视图是真实的表格,会占用磁盘空间

2.如果原表的数据查询比较慢,视图的查询也会比较慢,物化视图是重新保存的数据,快慢是根据当前物化视图的数据量来决定的

3.可以给物化视图创建索引加快它的查询速度

4.视图是跟着原表一起进行数据变更的,物化视图有实时更新和定时更新两种方法

手动刷新物化视图的表格:

begin

dbms_mview.refresh('大写的物化视图名字', '大写的刷新的方法');

end;

begin

dbms_mview.refresh('MV_EMP3','COMPLETE');

end;


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部