ORACLE数据库入门再在屋里坐会 (17)

特点:正常情况下,如果基表不存在,创建视图就会失败。但是可以使用 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)

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zyzwgw.html