物化视图

简介: 1. 基于rowid的物化视图1.1 创建基表CREATE TABLE B (ID NUMBER PRIMARY KEY, NAME VARCHAR2(30)); CREATE TAB...

1. 基于rowid的物化视图

1.1 创建基表

CREATE TABLE B (ID NUMBER PRIMARY KEY, NAME VARCHAR2(30)); 
CREATE TABLE c (ID NUMBER PRIMARY KEY, NAME VARCHAR2(30)); 
CREATE TABLE A (ID NUMBER, BID NUMBER, CID NUMBER, NUM NUMBER,   
  CONSTRAINT FK_A_B_BID FOREIGN KEY (BID) REFERENCES B(ID),   
  CONSTRAINT FK_A_C_BID FOREIGN KEY (CID) REFERENCES C(ID));

1.2 创建基表log

      CREATE MATERIALIZED VIEW LOG ON A WITH ROWID;
   CREATE MATERIALIZED VIEW LOG ON b WITH ROWID;
    CREATE MATERIALIZED VIEW LOG ON c WITH ROWID;

1.3,创建物化视图,注意rowid必需包含

    CREATE MATERIALIZED VIEW MV_ABC REFRESH FAST ON COMMIT AS
    SELECT C.ID CID, C.NAME CNAME, B.ID BID, B.NAME BNAME, A.NUM,
    A.ROWID AROWID, B.ROWID BROWID, C.ROWID CROWID,'a'
    FROM A, B, C WHERE A.BID = B.ID AND A.CID = C.ID

1.4 使用union all,SELECT列表中必须包含一列维护列,叫做UNION ALL标识符,每个UNION ALL分支的标识符列应包含不同的常量值;

CREATE MATERIALIZED VIEW MV_ABC REFRESH FAST ON COMMIT AS
    SELECT C.ID CID, C.NAME CNAME, B.ID BID, B.NAME BNAME, A.NUM,
    A.ROWID AROWID, B.ROWID BROWID, C.ROWID CROWID,'a'
    FROM A, B, C WHERE A.BID = B.ID AND A.CID = C.ID
    UNION ALL 
    SELECT C.ID CID, C.NAME CNAME, B.ID BID, B.NAME BNAME, A.NUM,
    A.ROWID AROWID, B.ROWID BROWID, C.ROWID CROWID,'b'
    FROM A, B, C WHERE A.BID = B.ID AND A.CID = C.ID ;

2.注意在对表进行truncate操作后,或者view log 中的列被删除时

--物化视图日志并不会被清空,此时其会阻塞基表的dml语句,此时必需手动进行COMPLETE刷新物化视图,切记切记
begin
  dbms_mview.refresh(list => 'RUDY_MV',method => 'C');
end;

更多知识有一篇很的博客

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

目录
相关文章
|
存储
ClickHouse物化视图
ClickHouse物化视图
449 1
|
SQL 监控 数据库
|
存储 Oracle 关系型数据库
|
Oracle 关系型数据库 数据库
Oracle 物化视图和物化视图日志
物化视图是将查询预先定义在结构中,并手动或者定期刷新将结果存储在物化视图段中,也就是说跟普通视图不同,它是需要存储空间的,从而不需要重新或者反复的执行sql语句,支持增量刷新,快速获取结果,提高数据获取的效率。
3432 0
|
监控 关系型数据库 数据库
物化视图加DBLINK实现数据的同步_20170216
【业务场景】需要把生产的ERP系统上面的一个表的数据抽取到另外一个报表的数据库里面,公司内部是没有ESB的平台,考虑到整个需求的紧急程度和对效率的要求,建议采用物化视图+DBLINK的方式来实现数据的同步; 【环境说明】 数据库的版本:11.
1685 0
|
SQL 索引
物化视图相关的性能改进
今天早上开发的一个同事找到我说他早上做了一个统计查询,但是感觉速度很慢,已经过了一个小时了还没有反应。想让我看看是什么情况。 我通过v$session查到有一个会话确实已经持续了近一个小时,查看sql语句是一个create table select * from xxx这样格式的语句。
1410 0
|
SQL 数据安全/隐私保护 索引
物化视图自动刷新的碰壁
今天和开发的同事讨论一个问题,他们说source 1的环境中存在一个表,现在希望目标环境target 1和target 2中都需要用到这部分的数据。 对于这个问题看似处理也比较常规。
896 0