Oracle materizlized view Study

来源:互联网 发布:mysql数据库设计 编辑:程序博客网 时间:2024/05/29 16:02

首先描述几个术语,如下:

基表:也就是我们常说的master table和master materialized view,这里说明一下,基表并不是说
这只有一个表,它是你创建MV时所需要用到的表(可能有多个)或相关的上一级的MV。

MV: 也就是物化视图,英文名materizlized view。
源端(master 站点,master MV size): 都是指基表所在的一端(基表所在数据库)
MV端(mv站点,mv site): 物化视图所在地一端(mv所在数据库)

需要注意的是,MV跟普通的view不同,它是有segment存在的,不像view那样是虚拟存在的。你可以再dba_semgents中
查到它的对象大小,当然它的好处就是,我们在利用MV进行查询时,不再需要去访问基表了,只需通过访问MV对应的
结果集就行了。当然,这里涉及一个刷新机制,MV的数据和基表的数据是定期刷新来完成同步的。后面会讲到涉及的
集中mv的刷新机制。

建立物化视图
CREATE MATERIALIZED VIEW VW_TEMPTABLE
REFRESH FORCE ON DEMAND
WITH ROWID
AS
SELECT "TEMPTABLE"."A" "A" FROM "TEMPTABLE" "TEMPTABLE";
相应的还要在表TEMPTABLE上建立视图log。


dbms_mview.refresh('表名', 'F') --快速刷新,也就是增量刷新

dbms_mview.refresh('表名', 'C')--完全刷新


我们通过查看试图dba_mviews的REFRESH_METHOD字段可以发现该自动有如下几种属性,换句话说也就是说
物化视图有如下几种刷新方式:

COMPLETE (C) - Materialized view is completely refreshed from the masters FORCE (?) - Oracle Database performs a fast refresh if possible, otherwise a complete refresh FAST (F) - Oracle Database performs an incremental refresh applying changes that correspond to changes in the masters since the last refresh NEVER (N) - User specified that the Oracle Database should not refresh this materialized view   简单在总结为如下几点:   compelete: 完全刷新,在压力比较大的情况下,完全刷新可能会带来很多问题,特别是跨站点的情况,对网络要求很高。 force:强制刷新,竟可能的使用增量快速刷新,如果不能则使用完全刷新。默认值是force。 fast: 增量快速刷新。 never:从不刷新。   还有一个字段BUILD_MODE,这是表明创建mv的方式,说白了就是指在创建mv时是否生成数据。默认有如下几种:  IMMEDIATE - Populated from the masters during creation DEFERRED - Not populated during creation. Must be explicitly populated later by the user. PREBUILT - Populated with an existing table during creation. The relationship of the contents of this prebuilt table to the materialized view's masters is unknown to the Oracle Database.

简单总结为如下几点:

immediate:创建mv时就生成数据了,也就是在创建mv时就会进行一次完全刷新,同步数据。默认方式。
deferred: 在创建mv时不生成数据,后面跟你的操作实际需要才生成数据,换句话说,使用这种方式创建mv时,当你查询
mv时数据是空的,比如你手工刷新以后,才能查到数据。

prebuilt: 创建时需要先存在跟物化视图存在相同的对象


0 0
原创粉丝点击