Oracle的实体化视图(MVIEW)的深入研究之一

原创 2007年09月14日 09:32:00
Oracle的实体化视图(MVIEW)的深入研究之一     CSDN Blog推出文章指数概念,文章指数是对Blog文章综合评分后推算出的,综合评分项分别是该文章的点击量,回复次数,被网摘收录数量,文章长度和文章类型;满分100,每月更新一次。

 Oracle的实体化视图(MVIEW)的深入研究之一

转: AnySQL.net

从Oracle 8i开始提供了实体化视图, 能过预先计算好的中间表来提高应用的访问速度, 在特定的情况下是很有用的一项技术. 另外实体化视图还可用于数据复制, 在这个上面的应用越来越多. MVIEW中经常跗以遇到刷新很慢的情况, 如何提高呢? 首先来研究一下刷新的过程. 下面是用来创建演示表的角本:

CREATE TABLE T_MVLOG (COL1 VARCHAR2(20));
CREATE MATERIALIZED VIEW LOG ON T_MVLOG
    WITH ROWID, sequence;
CREATE MATERIALIZED VIEW MV_T_MVLOG
   REFRESH FAST
   WITH ROWID
AS
   SELECT ROWID R_ID, A.* FROM T_MVLOG A;

    我们对DBMS_MVIEW.REFRESH作一个SQL_TRACE, 在这个例子中, 我在基表中插入了一打记录, 然后作跟踪的. 可以看到第一步为:

update "ANYSQL"."MLOG$_T_MVLOG" set snaptime$$ = :1  
   where snaptime$$ >
      to_date('2100-01-01:00:00:00','YYYY-MM-DD:HH24:MI:SS')

    第二步, 取得在这段时间内发生修改的每一行的ROWID

SELECT DISTINCT M_ROW$$ FROM
(
   SELECT M_ROW$$
        FROM "ANYSQL"."MLOG$_T_MVLOG" MLOG$
        WHERE "SNAPTIME$$" > :1 AND ("DMLTYPE$$" != 'I')
) LOG$
WHERE (M_ROW$$) NOT IN
     (
       SELECT ROWID FROM "T_MVLOG" "MAS_TAB$"
           WHERE MAS_TAB$.ROWID = LOG$.M_ROW$$
     )

    第三步, 取得刷新后的值

SELECT CURRENT$."R_ID",
       CURRENT$."COL1",
       ROWIDTOCHAR(CURRENT$.ROWID) M_ROW$$
FROM
(
  SELECT "A".ROWID "R_ID","A"."COL1" "COL1" FROM "T_MVLOG" "A"
) CURRENT$,
(
  SELECT DISTINCT M_ROW$$ FROM "ANYSQL"."MLOG$_T_MVLOG" MLOG$
      WHERE "SNAPTIME$$" > :1 AND ("DMLTYPE$$" != 'D')
) LOG$
WHERE CURRENT$.ROWID = LOG$.M_ROW$$

    第四步, 对MVIEW进行插入

INSERT INTO "ANYSQL"."MV_T_MVLOG"  ("R_ID","COL1","M_ROW$$")
   VALUES (:1,:2,:3)

    最后一步, 删除MVLOG中的值

delete from "ANYSQL"."MLOG$_T_MVLOG" where snaptime$$ <= :1

    从这外过程来看, 可以调的方法有四个, 首先尽量使用快速刷新, 提高刷新频率, 其次可以在MLOG$_T_MVLOG这个表的snaptime$$字段上建索引, 第三为刷新的过程设定会话级的DB_FILE_MULTIBLOCK_READ_COUNT以及SORT_AREA_SIZE等参数, 第四选择时间对MLOG$_T_MVLOG这个表进行重组以减少表的大小. 这些方法仅供参考. 

oracle9i实体化视图.

  • 2014年06月12日 14:49
  • 255KB
  • 下载

oracle row特性的使用-利用rownum固定实体化视图

今天主要和大家分享一下近期学习rownum的一个体会。直接看下面的例子吧                    通过上面的例子,我们发现F这个函数调用了1000000次,这样严重的影响了性能。为了减少...

Oracle如何实现两个数据库的同步(用实体化视图实现)(oracle快照实例)

一、技术实现细节 除非特别说明,下面的SQL命令都是在数据库ora_db2的SYSETM用户下运行的。 假设要复制(或同步)另一服务器上数据库ora_db1中用户db1的所有表。 1. 创...

Oracle普通视图和实体化视图比较

OraclOracle普通视图和实体化视图比较   相对于普通的视图来说,实体化视图的不同之处在于实体化视图管理存储数据,占据数据库的物理空间。实体化视图的结果会保存在一个普通的数据表中,...
  • YULAN1
  • YULAN1
  • 2014年08月25日 10:12
  • 455

云计算设计模式(十四)——实体化视图模式

云计算设计模式(十四)——实体化视图模式 产生过在一个或多个数据存储中的数据预填充的观点时,数据被格式化以不利于所需的查询操作的一种方式。这种模式可以帮助支持高效的查询和提取数据,并提高应用程序的性能...

ORA-12048:刷新实体化视图

当系统中存在多个物化视图,使用刷新组会大大简化物化视图的刷新,只需要将同一时间同步的物化视图全都放到一个刷新组中既可。 在9i中,使用刷新组方便的时候有一个缺点,如果其中一个物化视图报错...

VB.net APP.config 实体化访问 configurationsection_《Visual Basic 2008 高级编程》 实例改新

在第9章最后一个实例时遇到困难,一是由于我的OS是WIN10,只能装VS2015和SQL2012,二是示例数据库PUBS无法用,只能用adventureworks2012,三是VB2015不再支持IC...

利用onNewIntent避免Activity之间的跳转传值多次实体化

https://www.cnblogs.com/fuyouG/p/fuyou-G-entryName.html onNewIntent 需要注意的是: 1、通过Intent启到一个A...
  • wusj3
  • wusj3
  • 2017年11月24日 14:20
  • 43

oracle回滚机制深入研究

这篇文章主要描述oracle的回滚机制,篇幅可能较长,因为对于oracle的回滚机制来说,要讨论和描述的实在太多,只能刷选自己认为最有意义的一部分进行深入研究和分享...
  • oradh
  • oradh
  • 2014年05月14日 10:43
  • 1904
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Oracle的实体化视图(MVIEW)的深入研究之一
举报原因:
原因补充:

(最多只允许输入30个字)