试试看(不知道对不对啊,呵呵)
一、
把各段SELECT后面那部分
AND ( LC.PARTNER_ID IN (....
使用OR连接起来,应该就能够变成一个SELECT,这样看起来最起码舒服些
二、
想想办法把 IN 转化为直接等于的形式,这样效率应该能提升很多,缺点是可读性较差
三、
想办法把DISTINCT去掉,如果在SELECT中能够确定返回结果唯一则尽量不要加DISTINCT也不知道俺说得对不对,诸位不要拿板砖拍得太很啊~~~—————————————————————————————————
该死的CSDN,把旧帖子都TMD删了,气死我了!!!
一、
把各段SELECT后面那部分
AND ( LC.PARTNER_ID IN (....
使用OR连接起来,应该就能够变成一个SELECT,这样看起来最起码舒服些
二、
想想办法把 IN 转化为直接等于的形式,这样效率应该能提升很多,缺点是可读性较差
三、
想办法把DISTINCT去掉,如果在SELECT中能够确定返回结果唯一则尽量不要加DISTINCT也不知道俺说得对不对,诸位不要拿板砖拍得太很啊~~~—————————————————————————————————
该死的CSDN,把旧帖子都TMD删了,气死我了!!!
解决方案 »
- oracle dbLink
- 谁能提供一个oracle8.1.6for NT (oracle816nt.zip) 的临时下载地址,急用不盛感激!
- 100分求能在XP下正常安装的oracle!
- 高手们请帮帮忙!!!
- 请教一个关于update的问题!(有请高人)
- 又有错误!
- WHERE语句ORACLE是怎么判断的?
- 我想在一个月内基本学会oracle,可以介绍一本快速入门的书吗?另外,在哪下载软件oracle?
- 一上午都没有结果,关于导入问题
- ORA-06512: 在 "JTHFM.CUX_EBS_SYN_VENDER_PKG", line 7 ORA-01722: 无效数字 无效的数字,请联系系统管
- 问一个很菜的问题,请不要笑话我!
- 求助:监听程序配置总是不成功?
jo.debit_standard_amt, jo.credit_standard_amt,
jo.double_entry_date, jo.double_entry_id,
ac.gmss_p_l_class_id, lc.partner_id
FROM ag_journal jo,
ma_account_code ac,
lc_receive_payment_head lc,
p_l_class_id ci,
lg_double_entry_head ldeh,
ag_double_entry_head adeh
WHERE jo.account_code = ac.account_code
AND ac.gmss_p_l_class_id = ci.pl_class_id
AND ldeh.seq_no = adeh.seq_no
AND adeh.double_entry_id = jo.double_entry_id
AND ( lc.source_id = ldeh.source_id
OR (lc.partner_id, ldeh.source_id) IN (
SELECT partner_id, ap_id
FROM ap_ap_head
UNION ALL
SELECT partner_id, ar_id
FROM ar_ar_head
UNION ALL
SELECT partner_id, disposal_id
FROM ap_ap_head aah, ap_disposal ad
WHERE aah.ap_id = ad.ap_id
UNION ALL
SELECT partner_id, disposal_id
FROM ar_ar_head aah, ar_disposal ad
WHERE aah.ar_id = ad.ar_id)
)
我测了一下,这样的话由于from后面的表连接的 太多,所以效率更差,KingSunSha(弱水三千)这位大哥的方法我也试了一下,虽然代码看起来清楚了很多,但效率变得更差,可能是因为from 后面的表太多了??希望大家多多帮忙,谢谢大家了!!
JO.DEBIT_STANDARD_AMT,JO.CREDIT_STANDARD_AMT,
JO.DOUBLE_ENTRY_DATE,JO.DOUBLE_ENTRY_ID ,AC.GMSS_P_L_CLASS_ID,LC.PARTNER_ID
FROM AG_JOURNAL JO,MA_ACCOUNT_CODE AC,LC_RECEIVE_PAYMENT_HEAD LC
WHERE JO.ACCOUNT_CODE=AC.ACCOUNT_CODE AND
exists (select 1 from MA_ACCOUNT_CODE tt1 where tt1.ACCOUNT_CODE=JO.ACCOUNT_CODE and exists (
select 1 from MA_GMSS_P_L_CLASS tt2 where tt2.P_L_CLASS_ID=tt1.GMSS_P_L_CLASS_ID))
and exists (select 1 from LC_RECEIVE_PAYMENT_HEAD tt3 where tt3.PARTNER_ID=LC.PARTNER_ID and
exists(select 1 from LG_DOUBLE_ENTRY_HEAD tt4 where tt4.SOURCE_ID=tt3.SOURCE_ID and
exists(select 1 from AG_DOUBLE_ENTRY_HEAD tt5 where tt5.SEQ_NO=tt4.SEQ_NO and
DOUBLE_ENTRY_ID=JO.DOUBLE_ENTRY_ID)))有点建议:
1、尽量用exists代替in,这个效率会快很多,一般这类in都可以用exists代替;
2、如果可以得话,用union all 代替 union
这2个的差别是union会过虑2个sql语句中整条记录所有字段的值都一样的记录,而union all 却没有过虑这部分记录的时间。