日期:2014-05-16  浏览次数:20501 次

ORACLE物化视图 - 循序渐进MView(一) 什么是MView

?

http://www.dbabeta.com/2009/mview_step_by_step_01.html

?

前言
几个术语的对应
什么是MView
MView的基本概念
一个简单的例子
MView的作用
MView的刷新
MView刷新的分类
指定刷新方式
什么时候刷新
MView的基本构成


前言

MView的两大应用方向
  • 一是用于数据库的复制,这个在Oracle文档《Advanced Replication》中有详细的描述。
  • 另一个是用于数据仓库,同样Oracle文档《Oracle Database Data Warehousing Guide》中也有详细的描述。

本系列文章以实例的方式一步步的说是什么是MView、MView的结构、MView的基本工作过程,以及MView的管理方法。


几个术语的对应

基表
指的是英文里面的Master Table和Master Materialized View,并不只是只一个表,而是创建MView的时候所需要用到的n个表或者是相关的上一级的MView。
MView
就是Materialized View了,物化视图。
源数据库端
Master Site和Master Materialized View Site,指的是基表所在的数据库
MView端
Materialized View Site,MView所在的数据库

?


什么是MView


MView的基本概念

MView中文名称为物化视图(Materialized View),相对于不同的视图来说,MView的不同之处在于MView的结果会保存在一个普通的数据表中,在对MView进行查询的时候不再会对创建MView的基表进行查询,而是直接查询MView对应的结果表,然后通过定期的刷新机制来更新MView表中的数据。


一个简单的例子

-- 创建一个测试用的表T
USER@orcl>?create?table?t?(a?int,?b?varchar2(50),?constraint?pk_tprimary?key(a));
Table?created.
?
-- 创建对应的MV名为MVT
USER@orcl>?create?materialized?view?mvt?as?select?*?from?t;
Materialized?view?created.
?
-- 现在往表里面插入一些个数据
USER@orcl>?insert?into?t?select?rownum,?object_name?fromall_objects;
11449?rows?created.
?
USER@orcl>?commit;
Commit?complete.
?
-- 现在我们看一下数据的情况
USER@orcl>?select?count(*)?from?t;
??COUNT(*)
----------
?? ? 11449
?
-- mvt还是没有数据的
USER@orcl>?select?count(*)?from?mvt;
??COUNT(*)
----------
?? ? ? ? 0
?
-- 下面对mview做一次刷新看看
USER@orcl>?exec?dbms_mview.refresh('mvt');
PL/SQL?procedure?successfully?completed.
?
-- 现在能看到mv里面已经有数据了
USER@orcl>?select?count(*)?from?mvt;
?
??COUNT(*)
----------
?? ? 11449
?
-- 然后我们在看一下表T和MVT的结构可以发现他们两个是一样的
USER@orcl>?desc?t;
?Name? ? ? ? ? ? ? ? ?Null?? ??Type
?-------------------- -------- -------------
?A? ? ? ? ? ? ? ? ? ??NOT?NULL?NUMBER(38)
?B? ? ? ? ? ? ? ? ? ? ? ? ? ? ?VARCHAR2(50)
?
USER@orcl>?desc?mvt;
?Name? ? ? ? ? ? ? ? ?Null?? ??Type
?-------------------- -------- -------------
?A? ? ? ? ? ? ? ? ? ??NOT?NULL?NUMBER(38)
?B? ? ? ? ? ? ? ? ? ? ? ? ? ? ?VARCHAR2(50)


MView的作用