Oracle

您所在的位置:网站首页 物化视图占用空间 Oracle

Oracle

2023-12-28 04:21| 来源: 网络整理| 查看: 265

文章目录 含义物化视图的语法物化视图的创建1、自动刷新的物化视图 ON COMMIT2、非自动刷新的物化视图 ON demand 关于手动刷新物化视图的删除资料参考

含义

什么是物化视图?

物化视图,通俗点说就是物理化的视图。

什么叫物理化?

将视图以表结构的方式,存储在磁盘中。

在之前的博客中针对普通视图说过,普通视图的本质就是一段 SQL 语句,本身的数据不会存储在磁盘上,每次查询时,普通视图中的数据,来源于重新执行视图中的SQL语句。

普通视图就是将复杂的、可共用的SQL片段的封装。

但是,每次进行视图查询操作时,都将触发视图中的sql再次执行,程序的执行,存在执行快慢的问题,在程序界中存在一个说法叫时间复杂度。

物化视图相比普通视图而言,是将原本的普通视图中的SQL转换成了对应的表结构,并会在磁盘空间中进行存储。

可以理解为就是一张由SQL语句和查询字段构成的新的表。

当然,作为表而言,相对应的比如索引等操作也都可以实现。

但是物化视图由于占用了更多的服务器内存空间,也就导致出现空间复杂度的问题。

程序的效率,无非就是在时间复杂度与空间复杂度的取舍。

物化视图的语法

物化视图的创建语法,如下所示:

create materialized view [view_name] [ build [immediate|deferred] ] refresh [fast|complete|force] [ on [commit|demand] | start with (start_time) next (next_time) ] as {创建物化视图用的查询语句}

其中,各项关键字说明如下:

名称用途含义materialized物化视图关键字物理化build immediate(默认)初始数据方式物化视图首次创建后,就填充数据。build deferred初始数据方式首次创建物化视图,不填充数据。fast刷新方式增量更新,只会刷新自上次刷新以后的修改内容。complete刷新方式全部刷新。相当于重新执行一次创建视图的查询语句。force(默认)刷新方式由oracle在需要进行刷新操作时,当可以使用fast模式时,数据刷新将采用fast方式;否则使用complete方式。nerver刷新方式视图不进行任何刷新操作。on commit刷新时间(模态)在基表数据事务提交时,立即刷新对应物化视图。on demand(默认)刷新时间(模态)(oracle的默认类型)在用户需要刷新的时候进行刷新操作。这里就要求用户自己动手去刷新数据了(也可以使用job定时刷新)start with (start_time) next (next_time)刷新时间从指定的时间开始,每隔一段时间(由next指定)就刷新一次 物化视图的创建 1、自动刷新的物化视图 ON COMMIT

按照上面的语法与参数说明,创建一个简单的物化视图。

创建一张物化视图表,要求在事务提交后,立刻自动刷新物化视图数据。

create MATERIALIZED VIEW mv_bl_user_list refresh force -- 由oracle决定该刷新的时候,采取何种方式执行 ON COMMIT -- 刷新模态,触发点 AS SELECT * FROM bl_user_list

测试: 1、先执行物化视图的创建sql 2、查询基表数据信息 3、查询物化视图的数据信息 4、新增或者更新基表的数据 5、查询物化视图。 6、观察新增的数据是否自动刷新至物化视图中。

基表数据事务提交后,对应的物化视图数据也会同步及时变更!

2、非自动刷新的物化视图 ON demand

创建一个需要手动刷新数据的物化视图。

CREATE MATERIALIZED VIEW mv_bl_user_list refresh force ON demand AS SELECT * FROM bl_user_list

测试: 1、先执行物化视图的创建sql 2、查询基表数据信息 3、查询物化视图的数据信息 4、新增或者更新基表的数据 5、查询物化视图。 6、观察新增的数据是否自动刷新至物化视图中。

基表的数据事务提交后,对应物化视图中的数据并不会自动刷新!

关于手动刷新

如果在创建物化视图时,设定刷新模态为 on demand 时,会需要用户进行手动刷新操作。 比如,将上述的非自动刷新视图进行数据刷新操作。

begin dbms_mview.refresh('mv_bl_user_list','COMPLETE'); -- 'COMPLETE' 参数可以简写为 'C' ,如下sql也是可行的 -- dbms_mview.refresh('mv_bl_user_list','C'); end;

在这里插入图片描述

物化视图的删除

drop materialized view 物化视图名

资料参考

Oracle物化视图-看这一篇就可以了



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3