分类: Oracle
2008-05-23 13:14:50
来源: 作者:AnySQL.net |
|
从Oracle 8i开始提供了实体化视图, 能过预先好的中间表来提高的访问速度, 在特定的情况下是很有用的一项技术. 另外实体化视图还可用于数据复制, 在这个上面的应用越来越多. MVIEW中经常跗以遇到刷新很慢的情况, 如何呢? 首先来研究一下刷新的过程. 下面是用来创建演示表的角本: CREATE TABLE T_MVLOG (COL1 VARCHAR2(20)); 我们对DBMS_MVIEW.REFRESH作一个SQL_TRACE, 在这个例子中, 我在基表中插入了一打记录, 然后作跟踪的. 可以看到第一步为: update "ANYSQL"."MLOG $_T_MVLOG" set snaptime $ $ = :1 第二步, 取得在这段时间内发生修改的每一行的ROWID SELECT DISTINCT M_ROW $ $ FROM 第三步, 取得刷新后的值 SELECT CURRENT $."R_ID", 第四步, 对MVIEW进行插入 INSERT INTO "ANYSQL"."MV_T_MVLOG" ("R_ID","COL1","M_ROW $ $") 最后一步, 删除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这个表进行重组以减少表的大小. 这些方法仅供参考. |