oracle优化技巧及实例(总结)

Posted uuuz

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了oracle优化技巧及实例(总结)相关的知识,希望对你有一定的参考价值。

1.关于exists和in

in是循环的方式,在内存中处理,

exists是执行数据库查询,

 

select tpd.personaccountid,sum(nvl(tpd.CREDIT_SUM, 0)) as bjsr, sum(nvl(tpd.INTEREST_INCOME, 0)) as bjsr, sum(nvl(tpd.DEBIT_SUM, 0)) as bjzc from TGP_PERSON_DETAIL tpd
left join TAP_FUNDBUSINESS tfb
on tpd.FUNDBUSINESS_ID = tfb.FUNDBUSINESS_ID
where tpd.PERSONACCOUNTID
in (
select personaccountid from TGP_PERSONACCOUNT pa
left join tgp_person person
on pa.personid = person.personid
where person.zjhm = ‘330903196209160251‘
) group by tpd.personaccountid

执行100次 耗时0.017S左右

 

select tpd.personaccountid,sum(nvl(tpd.CREDIT_SUM, 0)) as bjsr, sum(nvl(tpd.INTEREST_INCOME, 0)) as bjsr, sum(nvl(tpd.DEBIT_SUM, 0)) as bjzc from TGP_PERSON_DETAIL tpd
left join TAP_FUNDBUSINESS tfb
on tpd.FUNDBUSINESS_ID = tfb.FUNDBUSINESS_ID
where
exists (
select personaccountid from (select personaccountid from TGP_PERSONACCOUNT pa
left join tgp_person person
on pa.personid = person.personid
where person.zjhm = ‘330903196209160251‘) a
where tpd.personaccountid = a.personaccountid
) group by tpd.personaccountid

执行100次 耗时0.020S左右

以上都为SELECT FORM a IN b(OR EXISTS B)  B中数据少的时候 采用IN 多的时候采用EXISTS  

 

select tpd.personaccountid,sum(nvl(tpd.CREDIT_SUM, 0)) as bjsr, sum(nvl(tpd.INTEREST_INCOME, 0)) as bjsr, sum(nvl(tpd.DEBIT_SUM, 0)) as bjzc from TGP_PERSON_DETAIL tpd
left join TAP_FUNDBUSINESS tfb
on tpd.FUNDBUSINESS_ID = tfb.FUNDBUSINESS_ID
HAVING
exists (
select personaccountid from (select personaccountid from TGP_PERSONACCOUNT pa
left join tgp_person person
on pa.personid = person.personid
where person.zjhm = ‘330903196209160251‘) a
where tpd.personaccountid = a.personaccountid
) group by tpd.personaccountid

执行100次 耗时2.36S左右

因此先筛选数据再分组 效率更高






























以上是关于oracle优化技巧及实例(总结)的主要内容,如果未能解决你的问题,请参考以下文章

Oracle SQL性能优化技巧大总结

Oracle SQL性能优化技巧大总结

oracle sql优化技巧

Oracle数据库运维方案及优化

索引优化原则及Oracle中索引总结

Oracle 查询技巧与优化 字符串操作