我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Oracle12c 中如何理解完全刷新的物化视图工作原理

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Oracle12c 中如何理解完全刷新的物化视图工作原理

Oracle12c 中如何理解完全刷新的物化视图工作原理,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。

什么是物化视图?

物化视图是用于复制数据和提高查询操作性能的数据库对象。

引用Darl Kuhn的一句话来回答就是:“定期清空和加载查询结果的表”

我们可以通过一个小例子来模拟最简单的完全刷新物化视图的工作过程

实验之前先明确两个定义:

主表:SH.costs ,example中的示例表

基表:SH.mv_costs ,保存查询结果集的实体表,也就是“模拟物化视图”的真正保存数据的地方。

实验一,模拟完全刷新物化视图

1. 主表为SH.costs

SH@pdb1 > select * from costs where rownum<10;

PROD_ID TIME_ID     PROMO_ID CHANNEL_ID  UNIT_COST UNIT_PRICE

---------- --------- ---------- ---------- ---------- ----------

14 17-JAN-98        999          3     890.98    1112.87

14 24-JAN-98        999          2     886.45    1108.99

14 03-MAR-98        999          2     904.18    1176.23

14 10-MAR-98        999          3     892.72    1159.99

14 14-MAR-98        999          4     863.64    1176.23

15 02-JAN-98        999          3     875.22    1013.99

15 17-JAN-98        999          4     846.71     999.99

15 19-JAN-98        999          4     846.71     999.99

15 02-FEB-98        999          4     863.64    1013.99

2. 假设主表的常用查询如下

SH@pdb1 > select promo_id,sum(unit_cost) cost from costs group by promo_id;

PROMO_ID       COST

---------- ----------

999 9168179.93

350  242949.08

351     258268

3. 使用CTAS方式创建一个表来保存常用查询的结果集,此刻它相当于物化视图的基表。

SH@pdb1 > create table mv_costs as select promo_id,sum(unit_cost) cost from costs group by promo_id;

4. 物化视图的基表执行完全刷新的过程模拟如下。首先删除基表中所有数据,然后再将源表的查询结果集插入到基表中。

SH@pdb1 > delete mv_costs;

SH@pdb1 > commit;

SH@pdb1 > insert into mv_costs select promo_id,sum(unit_cost) cost from costs group by promo_id;

SH@pdb1 > commit;

5. 查询物化视图基表的数据。 

SH@pdb1 > select * from mv_costs;

PROMO_ID       COST

---------- ----------

999 9168179.93

350  242949.08

351     258268

实验二, 创建完全刷新的物化视图

模拟结束,接下来创建一个真正的物化视图,跟上面模拟示例功能一样的完全刷新的物化视图。

SH@pdb1 > 

create materialized view mv_costs_1

segment creation immediate

refresh

complete

on demand

as select promo_id,sum(unit_cost) cost from costs group by promo_id;

通过下面的sql语句可以看到我们创建的物化视图是由视图、基表两部分组成。基表是真正存储查询结果集的地方。

SH@pdb1 > col object_name for a20

SH@pdb1 > select object_name,object_type from user_objects where object_name like 'MV_COSTS_1' order by object_name;

OBJECT_NAME          OBJECT_TYPE

-------------------- -----------------------

MV_COSTS_1           TABLE

MV_COSTS_1           MATERIALIZED VIEW

手工执行完全刷新,该命令执行效果和模拟演示中delete mv_costs, insert into mv_costs select ...是一样的。

SH@pdb1 > exec dbms_mview.refresh('MV_COSTS_1','C');

关于Oracle12c 中如何理解完全刷新的物化视图工作原理问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注亿速云行业资讯频道了解更多相关知识。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Oracle12c 中如何理解完全刷新的物化视图工作原理

下载Word文档到电脑,方便收藏和打印~

下载Word文档

编程热搜

目录