物化试图

本文探讨了数据库管理系统中物化视图的概念、优点、缺点以及创建方法,重点介绍了如何通过物化视图减少磁盘I/O、降低CPU消耗并加快响应时间,同时讨论了同步机制和刷新策略,最后提供了Oracle中创建物化视图的示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

         视图是数据库系统中的一个比较简单的概念,它又被称为续表。之所以称它为虚表,是因为它不是存储的实际的数据,而是存储的得到该视图的查询语句。如果查询的定义包含很复杂的表连接、集合函数等等运算内容是,获取视图内容会变得很慢。对这个问题,在现代的数据库管理系统中,都采用了一种空间换时间的解决办法-物化视图。从这个名字都大致可以猜出他的定义。他是一个实际存储数据的视图,不再是原来所说的一个虚表。过去常常以一个基表代替视图,用触发器维护新基表于源表的一致性。在Oracle和SQL Server中这种技术被称为物化视图,而在DB2中称为实例化查询表。
 在Oracle中,物化试图的前身是概要表管理和快照功能。物化视图的主要特性是:当基本表中的数据变化时,物化视图中的数据也会相应更新。物化视图中的数据也可以被更改,且改动能反映到基表中。物化视图为查询优化器提供了更好的查询路径。
要保持物化视图存储的数据为最新数据,需要有同步机制。Oracle提供了三种方式来维护同步:完全刷新(“refresh” complete)、增量刷新(“refresh” fast)、部分刷新(“refresh” force)。它们都可以在创建物化视图的时候指定。完全刷新指当要同步数据时,重新生成整个视图。增量刷新是仅将基本表已经修改的数据行更新到物化视图中。部分刷新可以指DBMS优先选择增量刷新,否则用完全刷新。除了刷新方式以外,数据库管理系统还要选择刷新的时间:刷新的时间可以是事务提交的时候刷新、根据需要刷新或者是指定刷新间隔时间。
 在Oracle中创建物化视图的命令如下:
 CREATE MATERIALIZED VIEW view_name
 build immediate “refresh” force on demand for update enable query rewrite
 AS select * from temp_table
 build immediate “refresh” force指明了物化视图的更新方式,on demand for update指明了物化视图更新的时间。
 物化视图的优点:减少磁盘I/O、减少CPU消耗、加快响应时间。
 物化视图的缺点:可能需要更多的磁盘空间、数据同步给系统带来负担。

         例如:

         主系统创建物化视图的日志:create materialized view log on SEXPORTPDF with primary key, rowid, sequence including new values;

         网上服务创建视图  :create materialized view MV_SEXPORTMANIFEST
                                                                                   refresh fast on demand
                                                                                       start with to_date('19-07-2011 16:21:31', 'dd-mm-yyyy hh24:mi:ss') next /*1:Mins*/ sysdate + 1/(60*24)
                                                                             as
                                                                                select    *      from SEXPORTMANIFEST @LNK_HY3UAT;

   

        单表刷新:EXEC dbms_mview.refresh('MV_SEXPORTMANIFEST')

         刷新组: exec DBMS_REFRESH.MAKE(name => 'mview_refresh_group_FF',list => '',next_date => SYSDATE, interval => '/*1:Mins*/ sysdate + 1/     (60*24)',implicit_destroy => FALSE,lax => FALSE,job => 0,rollback_seg => NULL,push_deferred_rpc => FALSE,refresh_after_errors => TRUE,purge_option => NULL,parallelism => NULL,heap_size => NULL);
);
          exec dbms_refresh.add(name => 'mview_refresh_group_FF', list => 'MV_SEXPORTMANIFEST');

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值