1、普通视图

数据库中的视图(view)是从一张或多张数据库表查询导出的虚拟表,反映基础表中数据的变化,且本身不存储数据。

2、物化视图【materialized view】

    2.1、概念: 物化视图是查询结果集的一份持久化存储,所以它与普通视图完全不同,而非常趋近于表。 可以是基础表中部分数据的一份简单拷贝,也可以是多表join之后产               生的结果或        其子集,或者原始数据的聚合指标等等。所以,物化视图不会随着基础表的变化而变化,所以它也称为快照(snapshot)。

             如果要更新数据的话,需要用户手动进行,如周期性执行SQL,或利用触发器等机制。
 
    2.2、产生物化视图的过程就叫做“物化”(materialization)。广义地讲,物化视图是数据库中的预计算逻辑+显式缓存,典型的空间换时间思路。
             所以用得好的话,它可以避免对基础表的频繁查询并复用结果,从而显著提升查询的性能。它当然也可以利用一些表的特性,如索引。

Material View的主要作用

  1. 实现两个数据库之间的数据同步,可以存在时间差。

  2. 如果是远程链接数据库的场景时,提高查询速度。

  (由于查询逻辑复杂,数据量比较大,导致每次查询视图的时候,查询速度慢,效率低下)

物化视图的刷新方式和方法

1. 刷新的方式

  Fast

  Complete

  Fource

2. 刷新的方法

  DBMS_REFRESH.Refresh

  DBMS_MVIEW.Refresh

  EXEC DBMS_MVIEW.refresh('BXJ_OBJECTS_MV_T1','C');
  EXEC DBMS_REFRESH.refresh('REP_MVIEWGROUP');

案例创建一个物化视图:
创建一个表:

    create table t(id int,name varchar);

插入数据:

    insert into t
-> select generate_series(1,1000000),random()::VARCHAR; 创建一个:物化视图
create materialized view mv_t as select * from t; 创建一个索引:
create unique index idx_ken on mv_t(id); 查询最大值:
select max(id) from mv_t; 插入一个最大数据:
insert into t values(1000001,random()); 插入后记得刷新数据:
refresh
refresh materialized view mv_t;

删除物化视图:drop

    drop materialized view mv_t;

 
五  、总结 
1.物化视图当前是全量刷新,暂不支持增量刷新 
2.刷新参数with data是全量更新(replace)物化视图内容,且是默认参数;with no data会清除物化视图内容,释放物化视图所占的空间,并使物化视图不可用 

参考链接:https://www.jianshu.com/p/3f385e4e7f95
                  https://blog.csdn.net/sunbocong/article/details/77931744

最新文章

  1. 树莓派 基于Web的温度计
  2. bzoj-4514(网络流)
  3. 强强联合之jquery操作angularjs对象
  4. 【随笔】内存 & I/O检测相关
  5. alt属性
  6. 【Android UI设计与开发】5.底部菜单栏(二)使用Fragment实现底部菜单栏
  7. 转 awk中RS,ORS,FS,OFS区别与联系
  8. C#遍历hashtable
  9. 【随便走走】Vietnam
  10. 模拟游客一天的生活与旅游java程序代写源码
  11. [LeetCode]切割字符串,使各个子串都是回文
  12. AFNetworking (3.1.0) 源码解析 <六>
  13. <frameset><frame><iframe>网页框架
  14. Polyline对象 - (及其他对象的关系)
  15. scheme Continuation
  16. JQ 更改li 颜色
  17. OkHttp–支持SPDY协议的高效HTTP库
  18. solr 通过URL删除索引
  19. java中的中文参数存到数据库乱码问题
  20. [POJ 2115} C Looooops 题解(扩展欧几里德)

热门文章

  1. 【NX二次开发】Block UI 线型
  2. 【SQLite】知识点概述
  3. 【NX二次开发】设置了“附加包含目录”,还是提示“无法打开包括文件”的解决方法
  4. .NET Core/.NET5/.NET6 开源项目汇总2:任务调度组件
  5. StackOverflow上面 7个最好的Java答案
  6. 前台使用Vue
  7. vs2008中安装dev之后输入代码会输入代码段但是报错,可能解决方法
  8. 关于Android Studio Emulator常见使用问题
  9. QL Server 创建用户时报错:15023 用户,组或角色'XXX'在当前数据库中已存在?
  10. [Django REST framework - 自动生成接口文档、分页]