专业编程教程与实战项目分享平台

网站首页 > 技术文章 正文

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

ins518 2024-10-21 07:47:27 技术文章 20 ℃ 0 评论

视图: 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;

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表