试试看(不知道对不对啊,呵呵)
一、
把各段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互联的问题
- oracle insert 返回值
- 关于oracle数据库备份与还原问题,自增列消失,高手进!
- 用 to_number(表字段名(varchar),'999999999'.99) 怎么出错??? 是不是不能对字段用to_bumber呀?急??
- 送分~~~~~~~~~~~~~关于一个pr*C的问题 :ORA-24324: service handle not initialized
- [急救]PROCEDURE的问题。
- 给hyh2000分
- 关于备份/还原数据库的问题
- oracle816:distributed update operation failed; rollback required!
- 后台数据库改成Oracle后,文件上传出现问题:
- 问一个很菜的问题,请不要笑话我!
- 求助:监听程序配置总是不成功?
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 却没有过虑这部分记录的时间。