物化视图 materialized view

本文详细介绍了Oracle物化视图的作用,包括提高查询速度和数据仓库优化。讨论了创建物化视图时的权限需求,如基于主键和rowid的物化视图。同时,阐述了物化视图的创建语法、查询重写、物化视图日志、刷新选项(如快速刷新、完整刷新、强制刷新)及其默认设置。通过实例展示了如何创建和刷新物化视图,并探讨了升级对物化视图的影响。最后,文章提供了查询物化视图和手动刷新的SQL语句。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、物化视图作用

1)起源于数据仓库,早先用于预先计算,并保存表连接表聚集等耗时较多操作的结果。以便于在执行查询时,避免在基表上进行这些耗时的操作(基表上进行耗时操作是不是会影响其他用户使用这个基表的效率,毕竟基表查询肯定很频繁?或者单纯从Oracle性能角度出发,希望利用物化视图减少基表非常耗时的操作,从而提升数据库性能?),从而快速得到结果。

2)物化视图和表一样可以进行查询。物化视图还用于复制移动计算等方面。

二、物化视图创建时的权限问题

基于主键的物化视图:访问主表,访问主表的日志,create materialized view权限

基于rowid的物化视图:访问主表,create materialized view权限

三、创建物化视图语法

create materialized view [view_name]

refresh [fast|complete|force]

[

on [commit|demand]  |

start with (start_time) next (next_time)

]

as

{创建物化视图时用的查询语句}

四、物化视图创建时选项

4.1查询重写 query rewrite

查询重写指当对物化视图的基表进行查询时,Oracle会先判断是否可以通过查询物化视图直接得到结果。默认为disable query rewrite

4.2物化视图日志

在基于主键的物化视图上,当需要进行快速刷新时,需要建立物化视图日志。

4.3刷新

指当基表发生DML操作后,物化视图以哪种方式和基表进行同步。

刷新模式有2种:

  • on demand    用户在需要时进行刷新,刷新时间由用户定义
  • on commit
  • failed immediate

刷新方法有4种:

  • fast           一种增量刷新,在上次刷新的基础上,对此次在基表做的DML修改进行刷新。只刷                   新上次刷新以后做的修改
  • complete  完全刷新。是对整个物化视图进行的刷新
  • force         oracle在刷新时会判断是否可以采用fast刷新,如果不可以会采用complete刷新                 (肯定会刷新。若上次刷新之后的操作丢失,无法做fast刷新,于是做全表刷新)
  • nerver       物化视图不做任何刷新。

刷新默认值是force on demand

五、实践

1.查看所有的物化视图

SQL> select * from user_mviews;

no rows selected

2.手动刷新物化视图

BEGIN
DBMS_MVIEW.REFRESH (
list => 'MV_T_HR_BMXX_NIRC',
Method =>'COMPLETE',
refresh_after_errors => True);
end;

其中MV_T_HR_BMXX_NIRC是物化视图的名称

3.创建数据量非常大的表

SQL> conn / as sysdba;
Connected.
SQL> create table scott.test082601 as select * from dba_objects;

Table created.

SQL> conn scott/scott;
Connected.
SQL> select count(*) from test082601;

  COUNT(*)
----------
     79318

创建约束和基表创建物化视图日志

alter table test082601 add constraint test_pk_pid primary key(OBJECT_ID);

create materialized view log on test082601 with primary key;

创建下面的物化视图

 create materialized view mv01 build immediate refresh force on demand as select * from test082601;

create materialized view mv build immediate refresh fast on demand as select * from test082601;

create materialized view mv build immediate refresh complete on demand as select * from test082601;

向基表中插入数据

测试:

insert into test082601(object_id,object_name) values(120000,'this is a test')

插入

begin

for i in 100001..110000 loop

insert into test082601(object_id,object_name) values(i,'this is a test');

end loop;

end;

/

对三个表分别做全刷新,增量刷新

升级至19.11

查看是否失效;

查看刷新是否可行;

六、检测升级对物化视图的影响

问题描述:

即使对物化视图做增量刷新,在升级后物化视图内容是否会丢失

不对物化视图做刷新,在升级后查看物化视图是否失效

对物化视图做刷新,查看升级后物化视图是否失效

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值