问题描述:此更新语句在过程包里执行:Update /*+index(ac20_index3)*/ ac20 set aae200='1'
where aack01=a
and aae002<b
and aae140 in (c,d)
and aae200='6';ac20_index3为建在ac20表上的联合索引的名字,联合索引含的字段依次为:
aack01、aae002、aae140、aae200。在过程包里执行大约需要10-12秒时间,而如果把此语句的参数赋值后在PL/SQL里执行却基本上是接近于0秒,0.0016秒时间。ac20表的数据量大概为600万条数据。字段类型说明:
aack01--int
aae002--varchar2(为年月的时间字符串,如“200612”,因此用小于符号)
aae140--varchar2
aae200--varchar2请各位高手指点,为什么直接赋值与参数赋值,效率却相差如此之大,该如何提高这效率呢?问题解决即刻散分,再次希望和感谢高手们帮助解决此问题。
where aack01=a
and aae002<b
and aae140 in (c,d)
and aae200='6';ac20_index3为建在ac20表上的联合索引的名字,联合索引含的字段依次为:
aack01、aae002、aae140、aae200。在过程包里执行大约需要10-12秒时间,而如果把此语句的参数赋值后在PL/SQL里执行却基本上是接近于0秒,0.0016秒时间。ac20表的数据量大概为600万条数据。字段类型说明:
aack01--int
aae002--varchar2(为年月的时间字符串,如“200612”,因此用小于符号)
aae140--varchar2
aae200--varchar2请各位高手指点,为什么直接赋值与参数赋值,效率却相差如此之大,该如何提高这效率呢?问题解决即刻散分,再次希望和感谢高手们帮助解决此问题。
alter system flush shared_pool;
再执行看看.
提高session执行速度
2个语句相比较只有参数的数有变动,那问题只可能和参数有关联确定几个问题
1.在包中执行的时间10-12是仅仅这个UPDATE语句的执行时间还是整个过程或函数的执行时间
2.你使用DBMS_OUTPUT把包中的参数SHOW出来看看是否和你自己给的是一直的:)
bobfang(匆匆过客) 谢谢你,接你的建议已试过,无变化:)。Eric_1999(╙@^@╜) ,你的建议,我又试过之后,确实效率上提高了一些,再次测试时此更新语句需要4秒时间,感谢。但有一问题再请教,执行刷新oracle数据库中的共享池时,是否会对其它正在执行的后台包业务处理产生影响?希望大家继续关注此问题,看看还有什么办法可以提高执行语句本身的效率。