update i_tableName t
set t.staffid = (select ci.custommgrid from T_ESL_HIGHCUSTOM ci where ci.acceptphone = t.acceptphone)
,t.EXTRACTSEQ = 'N' where t.updatesequence = :updateSequence
and exists(select cii.ACCEPTPHONE from T_ESL_HIGHCUSTOM cii where cii.acceptphone = t.acceptphone);SQL如一所示,i_tableName这个表中大概有10W条数据,T_ESL_HIGHCUSTOM这个表400W数据,此条SQL中所用到的条件都带有索引,现在做性能测试时发现这个SQL的CPU利用率太高,想优化一下这个SQL,请各位大侠帮忙看一下,不胜感激。
set t.staffid = (select ci.custommgrid from T_ESL_HIGHCUSTOM ci where ci.acceptphone = t.acceptphone)
,t.EXTRACTSEQ = 'N' where t.updatesequence = :updateSequence
and exists(select cii.ACCEPTPHONE from T_ESL_HIGHCUSTOM cii where cii.acceptphone = t.acceptphone);SQL如一所示,i_tableName这个表中大概有10W条数据,T_ESL_HIGHCUSTOM这个表400W数据,此条SQL中所用到的条件都带有索引,现在做性能测试时发现这个SQL的CPU利用率太高,想优化一下这个SQL,请各位大侠帮忙看一下,不胜感激。
解决方案 »
- 此问题如何应付?<oracle>
- sqlserver转oracle时,group by 不能使用序列的解决办法?
- trunc(sysdate - 8/24)是什么意思
- 在SQL server 中DATEDIFF函数,在Oracle中用那个?
- 问下:关于回滚段以及跟undo有啥关系,还有在oracle体系中什么时候用到回滚段呢等等?
- 从8.0.5升级到8.1.7出现的问题,见内容
- 捉间谍
- 安装Oracle时Database Configuration Assistant 最后一步停住了
- 请教个复杂的问题——关于SQL中的数字和字符串concat的问题
- 请教:用IMP73,遇到回滚段出错的问题
- oracle升级
- Oracle存储过程-出错,急
using T_ESL_HIGHCUSTOM ci
on (
ci.acceptphone = t.acceptphone
and t.updatesequence = :updateSequence
)when matched then
update set t.staffid = ci.custommgrid,t.EXTRACTSEQ = 'N'
NALYZE TABLE i_tableName COMPUTE STATISTICS分析这两张表
set t.staffid = (select ci.custommgrid from T_ESL_HIGHCUSTOM ci where ci.acceptphone = t.acceptphone)
,t.EXTRACTSEQ = 'N' where t.updatesequence = :updateSequence
and 1=(select count(*) from T_ESL_HIGHCUSTOM cii where cii.acceptphone = t.acceptphone and rownum<2);
(确定索引都正常的情况下.
试一试这一个
贴个statspack reoprt上来看看。
查询出来的值放到临时表中,然后再根据这个临时表(根据上述查询跳出来的,数据量肯定是小于10万的),来更新表i_tableName。 这样性能至少能提高一倍以上。