Oracle的实体化视图(MVIEW)的深入研究之一
来源:互联网 发布:pdf to dwg for mac 编辑:程序博客网 时间:2024/05/23 18:43
Oracle的实体化视图(MVIEW)的深入研究之一 ![](http://blog.csdn.net/images/star.gif)
![](http://blog.csdn.net/images/star.gif)
![](http://blog.csdn.net/images/star.gif)
![](http://blog.csdn.net/images/star.gif)
![](http://blog.csdn.net/images/star_half.gif)
![CSDN Blog推出文章指数概念,文章指数是对Blog文章综合评分后推算出的,综合评分项分别是该文章的点击量,回复次数,被网摘收录数量,文章长度和文章类型;满分100,每月更新一次。 CSDN Blog推出文章指数概念,文章指数是对Blog文章综合评分后推算出的,综合评分项分别是该文章的点击量,回复次数,被网摘收录数量,文章长度和文章类型;满分100,每月更新一次。](http://blog.csdn.net/images/ask.gif)
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这个表进行重组以减少表的大小. 这些方法仅供参考.
- Oracle的实体化视图(MVIEW)的深入研究之一
- Oracle的实体化视图(MVIEW)的深入研究之一
- Oracle的实体化视图(MVIEW)的深入研究之二
- Oracle的实体化视图(MVIEW)的深入研究之三
- Oracle的实体化视图(MVIEW)的深入研究之四
- Oracle的实体化视图(MVIEW)的深入研究之四
- Oracle的实体化视图(MVIEW)的深入研究之三
- Oracle的实体化视图(MVIEW)的深入研究之二
- Oracle的实体化视图管理
- ORACLE物化视图--循序渐进MView(二) MView Log的结构与快速刷新
- oracle 物化视图 -循序渐进MView(三) 基于ROWID的MView
- oracle 物化视图 -循序渐进MView(三) 基于ROWID的MView
- oracle row特性的使用-利用rownum固定实体化视图
- Oracle DBLinke+实体化视图同步两个数据库的数据
- 实体化视图的使用心得
- 实体化视图的使用心得
- 表、视图、实体化视图的比较
- oracle 实体化视图使用
- JDOM 包概览
- 一句话删除多余的Windows Messenger
- Oracle的实体化视图(MVIEW)的深入研究之四
- Oracle的实体化视图(MVIEW)的深入研究之三
- Oracle的实体化视图(MVIEW)的深入研究之二
- Oracle的实体化视图(MVIEW)的深入研究之一
- select a different database(other than MySQL)
- 博客开张
- windows 2003 Server 如何禁用启动时 ctrl+alt+delete/关机时原因查询?
- 面试有感
- asp.net生成html类
- distinct
- JavaScript常用技巧
- asp生成html页面的模板类