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

55次阅读
没有评论

共计 2102 个字符,预计需要花费 6 分钟才能阅读完成。

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

什么是物化视图?

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

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

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

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

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

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

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

1. 主表为 SH.costs

SH@pdb1 select * from costs where rownum

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

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-07-19发表,共计2102字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)