oracle 表分析影响吗,oracle新手请教物化视图对基表DML操作的性能影响问题。

更新一下,再对视图中的三表主键和rowID加了索引之后,现在更新主连接表的数据刷新还算快,<1秒。但是对B和C表的字段更新时,时间还是巨慢无比,>100秒,对sql进行跟踪后,发现对从表更新时的语句如下:

INSERT INTO "EAM_ASSETII"."MVIEW_TEST" SELECT /*+ NO_MERGE("JV$") */ /*+ */

--所有字段--

FROM

(

SELECT "MAS$"."ROWID" "RID$"  ,  "MAS$".*

FROM

"EAM_ASSETII"."T_ASSET_BASE_INF_VO" "MAS$"

WHERE ROWID IN

(SELECT  /*+

CARDINALITY(MAS$ 2)  NO_SEMIJOIN */  CHARTOROWID("MAS$"."M_ROW$$") RID$

FROM

"EAM_ASSETII"."MLOG$_T_ASSET_BASE_INF_VO" "MAS$"

WHERE

"MAS$".SNAPTIME$$ > :1 )

)  AS OF SNAPSHOT (:2) "JV$",

"T_ASSET_FINANCE_INF" AS OF SNAPSHOT (:2)  "MAS$0",

"T_ASSET_ENTRY_VO" AS OF SNAPSHOT (:2) "MAS$2"

WHERE ("MAS$2"."T_ASSET_ENTRY_VO_ID"="JV$"."T_ASSET_ENTRY_VO_ID"(+)

AND "MAS$2"."T_ASSET_ENTRY_VO_ID"="MAS$0"."T_ASSET_ENTRY_VO_ID"(+))

AND NOT EXISTS (

SELECT 1 FROM "EAM_ASSETII"."MVIEW_TEST" "SNA2$"

WHERE

("SNA2$"."ID1" = "MAS$2".ROWID)

AND ("SNA2$"."ID3" = "MAS$0".ROWID OR "MAS$0".ROWID IS NULL )

AND "JV$".RID$ IS NULL)

AND NOT EXISTS (

SELECT 1 FROM "T_ASSET_BASE_INF_VO" AS OF SNAPSHOT (:2)  "MAS_INNER$",

"T_ASSET_ENTRY_VO" AS OF SNAPSHOT (:2)  "MAS_OUTER$"

WHERE "MAS$2".ROWID = "MAS_OUTER$".ROWID

AND "JV$".RID$ IS NULL

AND "MAS_OUTER$"."T_ASSET_ENTRY_VO_ID"="MAS_INNER$"."T_ASSET_ENTRY_VO_ID"

)

其中 T_ASSET_ENTRY_VO为A表即主表,T_ASSET_BASE_INF_VO为B表即从表1,T_ASSET_FINANCE_INF为C表即从表2.这个语句是更新B表中的一个基础字段生成的insert语句。对应的执行计划如下:

Rows     Row Source Operation

-------  ---------------------------------------------------

1  FILTER  (cr=2534500 pr=53290 pw=8494 time=292329958 us)

630109   HASH JOIN RIGHT OUTER (cr=14067 pr=10973 pw=8494 time=10354142 us)

1    VIEW  (cr=8 pr=0 pw=0 time=234 us)

1     NESTED LOOPS  (cr=8 pr=0 pw=0 time=227 us)

1      VIEW  VW_NSO_1 (cr=7 pr=0 pw=0 time=199 us)

1       SORT UNIQUE (cr=7 pr=0 pw=0 time=195 us)

2        TABLE ACCESS FULL MLOG$_T_ASSET_BASE_INF_VO (cr=7 pr=0 pw=0 time=125 us)

1      TABLE ACCESS BY USER ROWID T_ASSET_BASE_INF_VO (cr=1 pr=0 pw=0 time=24 us)

630109    HASH JOIN RIGHT OUTER (cr=14059 pr=10973 pw=8494 time=7836527 us)

353072     TABLE ACCESS FULL T_ASSET_FINANCE_INF (cr=5228 pr=7 pw=0 time=50 us)

630109     TABLE ACCESS FULL T_ASSET_ENTRY_VO (cr=8831 pr=2472 pw=0 time=1268926 us)

630108   FILTER  (cr=2520433 pr=42317 pw=0 time=280764547 us)

630108    MAT_VIEW ACCESS BY INDEX ROWID MVIEW_TEST (cr=2520433 pr=42317 pw=0 time=279379249 us)

630108     INDEX RANGE SCAN MVIEW_TEST_ID1_INDEX (cr=1890325 pr=2705 pw=0 time=17218297 us)(object id 115685)

0   FILTER  (cr=0 pr=0 pw=0 time=2 us)

0    NESTED LOOPS  (cr=0 pr=0 pw=0 time=0 us)

0     TABLE ACCESS BY USER ROWID T_ASSET_ENTRY_VO (cr=0 pr=0 pw=0 time=0 us)

0     INDEX RANGE SCAN T_ENTRY_ID_INDEX (cr=0 pr=0 pw=0 time=0 us)(object id 115676)

********************************************************************************

请高手分析下并给出优化建议。另外我有一个想法,是否可以在3张基表中使用触发器在insert,update,delete操作之后使用DML语句来更新该物化视图,自己写DML来更新的话肯定会快很多,请各位高手分析下这个方法是否可行。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值