承请各位帮小弟看看,Oracle语句,为何如此慢!多谢
承请各位帮小弟看看,Oracle语句,为何如此慢!谢谢
小弟最近项目遇到一个很棘手的sql,执行的效率特别特比的慢,大约需要6分钟才有结果,请各位帮小弟我看看到底是怎么回事。
数据库:oracle11g
SQL语句:
select count(*) as col_0_0_
from ITSM_BP_OVERTIME overtimepr0_ inner join ITSM_BP_INSTANCE overtimepr0_1_
on overtimepr0_.ID = overtimepr0_1_.ID
where overtimepr0_1_.JBPM_INSTANCE_ID in
(select distinct taskinstan3_.PROCINST_
from JBPM_POOLEDACTOR pooledacto1_
left outer join JBPM_TASKACTORPOOL taskinstan2_ on pooledacto1_.ID_ = taskinstan2_.POOLEDACTOR_
left outer join JBPM_TASKINSTANCE taskinstan3_ on taskinstan2_.TASKINSTANCE_ = taskinstan3_.ID_
where pooledacto1_.ACTORID_ in
('id:00000000000000000000000000000001',
'organization:d5491986b2e144ee9833029d3c390c3d',
'role:8a8186a24d654dc5014d994126e869a8',
'role:8a8186a24d654dc5014d9940825969a6',
'role:8a81bfba4540503b0145407b9ada000d',
'role:8a8186a24d654dc5014d9941714a69ad',
'role:8a8186a24b06eab5014b0705b940003f',
'role:00000000000000000000000000000001',
'role:8a81bfb443413cda0143426ba1590043',
'role:8a8186a24d654dc5014d9940da0169a7',
'role:8a81bfb4437569e601437650631b0028',
'role:8a81bfb4461cc90b01461dbcb9150007',
'role:8a81bfba4540503b01454075a91f000a',
'role:8a81bfba438fa39601438fc384f40001',
'role:8a8a18d12d64e5ef012d650ee61c000e',
'role:8a8186a24d654dc5014d9941cbee69ae',
'role:8a8186a24d654dc5014d99425ae369b0',
'role:8a81bfba438fa39601438fc46bf40002',
'role:8a81bfba4540503b01454067b39f0004',
'role:8a81bfba4540503b01454066610f0003',
'role:8a8186a24d654dc5014d9942169669af')
and taskinstan3_.ISOPEN_ = 1
and (taskinstan3_.ACTORID_ is null)
and taskinstan3_.ISSUSPENDED_ <> 1)
测试描述:
1、当不使用统计的‘count(*) as col_0_0_’变为'*'就比较快;
2、单独查询子查询也非常的快;
3、将子查询的结果直接替换子查询的sql ,效率也很快;
问题点:
如何将执行效率变得很快?最好能控制到3秒内。求各位帮帮小弟。谢谢啦,来着都有分送哈。
------解决思路----------------------
看看能不能把前一个in换成exists试试呢,一般in会慢一些
------解决思路----------------------
试试这个SQL:
------解决思路----------------------
小弟最近项目遇到一个很棘手的sql,执行的效率特别特比的慢,大约需要6分钟才有结果,请各位帮小弟我看看到底是怎么回事。
数据库:oracle11g
SQL语句:
select count(*) as col_0_0_
from ITSM_BP_OVERTIME overtimepr0_ inner join ITSM_BP_INSTANCE overtimepr0_1_
on overtimepr0_.ID = overtimepr0_1_.ID
where overtimepr0_1_.JBPM_INSTANCE_ID in
(select distinct taskinstan3_.PROCINST_
from JBPM_POOLEDACTOR pooledacto1_
left outer join JBPM_TASKACTORPOOL taskinstan2_ on pooledacto1_.ID_ = taskinstan2_.POOLEDACTOR_
left outer join JBPM_TASKINSTANCE taskinstan3_ on taskinstan2_.TASKINSTANCE_ = taskinstan3_.ID_
where pooledacto1_.ACTORID_ in
('id:00000000000000000000000000000001',
'organization:d5491986b2e144ee9833029d3c390c3d',
'role:8a8186a24d654dc5014d994126e869a8',
'role:8a8186a24d654dc5014d9940825969a6',
'role:8a81bfba4540503b0145407b9ada000d',
'role:8a8186a24d654dc5014d9941714a69ad',
'role:8a8186a24b06eab5014b0705b940003f',
'role:00000000000000000000000000000001',
'role:8a81bfb443413cda0143426ba1590043',
'role:8a8186a24d654dc5014d9940da0169a7',
'role:8a81bfb4437569e601437650631b0028',
'role:8a81bfb4461cc90b01461dbcb9150007',
'role:8a81bfba4540503b01454075a91f000a',
'role:8a81bfba438fa39601438fc384f40001',
'role:8a8a18d12d64e5ef012d650ee61c000e',
'role:8a8186a24d654dc5014d9941cbee69ae',
'role:8a8186a24d654dc5014d99425ae369b0',
'role:8a81bfba438fa39601438fc46bf40002',
'role:8a81bfba4540503b01454067b39f0004',
'role:8a81bfba4540503b01454066610f0003',
'role:8a8186a24d654dc5014d9942169669af')
and taskinstan3_.ISOPEN_ = 1
and (taskinstan3_.ACTORID_ is null)
and taskinstan3_.ISSUSPENDED_ <> 1)
测试描述:
1、当不使用统计的‘count(*) as col_0_0_’变为'*'就比较快;
2、单独查询子查询也非常的快;
3、将子查询的结果直接替换子查询的sql ,效率也很快;
问题点:
如何将执行效率变得很快?最好能控制到3秒内。求各位帮帮小弟。谢谢啦,来着都有分送哈。
------解决思路----------------------
看看能不能把前一个in换成exists试试呢,一般in会慢一些
------解决思路----------------------
试试这个SQL:
select count(*) as col_0_0_
from ITSM_BP_OVERTIME IBO
inner join ITSM_BP_INSTANCE IBI on IBO.ID = IBI.ID
where exists(select 1
from JBPM_POOLEDACTOR JPR
left join JBPM_TASKACTORPOOL JTL on JPR.ID_ = JTL.POOLEDACTOR_
left join JBPM_TASKINSTANCE JTE on JTL.TASKINSTANCE_ = JTE.ID_
where JTE.ISOPEN_ = 1
and JTE.ACTORID_ is null)
and JTE.ISSUSPENDED_ <> 1
and JPR.ACTORID_ in
('id:00000000000000000000000000000001',
'organization:d5491986b2e144ee9833029d3c390c3d',
'role:8a8186a24d654dc5014d994126e869a8',
'role:8a8186a24d654dc5014d9940825969a6',
'role:8a81bfba4540503b0145407b9ada000d',
'role:8a8186a24d654dc5014d9941714a69ad',
'role:8a8186a24b06eab5014b0705b940003f',
'role:00000000000000000000000000000001',
'role:8a81bfb443413cda0143426ba1590043',
'role:8a8186a24d654dc5014d9940da0169a7',
'role:8a81bfb4437569e601437650631b0028',
'role:8a81bfb4461cc90b01461dbcb9150007',
'role:8a81bfba4540503b01454075a91f000a',
'role:8a81bfba438fa39601438fc384f40001',
'role:8a8a18d12d64e5ef012d650ee61c000e',
'role:8a8186a24d654dc5014d9941cbee69ae',
'role:8a8186a24d654dc5014d99425ae369b0',
'role:8a81bfba438fa39601438fc46bf40002',
'role:8a81bfba4540503b01454067b39f0004',
'role:8a81bfba4540503b01454066610f0003',
'role:8a8186a24d654dc5014d9942169669af'
)
and IBI.JBPM_INSTANCE_ID = JTE.PROCINST_
)
------解决思路----------------------
select count(*) as cnt
from ITSM_BP_OVERTIME IBO
inner join ITSM_BP_INSTANCE IBI on IBO.ID = IBI.ID
where exists(select 1
from JBPM_POOLEDACTOR JPR
left join JBPM_TASKACTORPOOL JTL on JPR.ID_ = JTL.POOLEDACTOR_
left join JBPM_TASKINSTANCE JTE on JTL.TASKINSTANCE_ = JTE.ID_
where JTE.ISOPEN_ = 1
and JTE.ACTORID_ is null
and JTE.ISSUSPENDED_ <> 1
and JPR.ACTORID_ in
('id:00000000000000000000000000000001',
'organization:d5491986b2e144ee9833029d3c390c3d',
'role:8a8186a24d654dc5014d994126e869a8',
'role:8a8186a24d654dc5014d9940825969a6',
'role:8a81bfba4540503b0145407b9ada000d',
'role:8a8186a24d654dc5014d9941714a69ad',
'role:8a8186a24b06eab5014b0705b940003f',
'role:00000000000000000000000000000001',
'role:8a81bfb443413cda0143426ba1590043',
'role:8a8186a24d654dc5014d9940da0169a7',
'role:8a81bfb4437569e601437650631b0028',
'role:8a81bfb4461cc90b01461dbcb9150007',
'role:8a81bfba4540503b01454075a91f000a',
'role:8a81bfba438fa39601438fc384f40001',
'role:8a8a18d12d64e5ef012d650ee61c000e',
'role:8a8186a24d654dc5014d9941cbee69ae',
'role:8a8186a24d654dc5014d99425ae369b0',
'role:8a81bfba438fa39601438fc46bf40002',
'role:8a81bfba4540503b01454067b39f0004',
'role:8a81bfba4540503b01454066610f0003',
'role:8a8186a24d654dc5014d9942169669af'
)
and IBI.JBPM_INSTANCE_ID = JTE.PROCINST_
)