2016-12-05 54 views
0

我有一个Oracle连接查询,非常慢地选择数据。它像1000行7分钟。请你帮忙以不同的方式编写代码,这样数据就会更快。接下来的步骤是使用Select值并将数据转储到MySQL表中。我在这里使用Pentaho工具。由于我有Oracle Join查询,选择数据非常慢

select 
null id, 
ss.ILOAN_CODE , 
ss.INST_NUM , 
ss.INST_AMT , 
ss.INST_PRINCIPAL , 
ss.INST_INTEREST , 
ss.BALANCE_PRINCIPAL , 
ss.INST_DUE_DATE , 
ss.PAID_FLAG , 
ss.LATE_FEE , 
ss.PAYMENT_DATE , 
ss.INST_AMT_PAID , 
ss.INST_AMT_DUE , 
ss.REV_CHECK_NUM , 
ss.REV_CHECK_AMT , 
ss.CREATED_BY , 
ss.DATE_CREATED , 
ss.UPDATED_BY , 
ss.DATE_UPDATED , 
ss.INST_DAYS , 
ss.MATURED_INTEREST , 
ss.UNPAID_INTEREST , 
ss.ADJ_INST_PRINCIPAL , 
ss.ADJ_INST_AMT , 
ss.ADJ_INST_INTEREST , 
ss.ADJ_BALANCE_PRINCIPAL , 
ss.ADJ_MATURED_INTEREST , 
ss.ADJ_UNPAID_INTEREST , 
ss.IS_PRINTED , 
ss.RTN_FEE_AMT , 
ss.WAIVE_FEE_AMT , 
ss.LATE_FEE_AMT , 
ss.APR_BALANCE_PRINCIPAL , 
ss.ACHDEPOSIT_DATE , 
ss.ACHRETURN_DATE , 
ss.ACHCLEAR_DATE , 
ss.APR_INST_INTEREST , 
ss.APR_UNPAID_INTEREST , 
ss.CSO_FEE , 
ss.MATURED_CSO_FEE , 
ss.UNPAID_CSO_FEE , 
ss.CSO_FEE_BALANCE 
from ST_IL_SCHEDULE ss, 
    ST_IL_MASTER sm, 
    BO_MASTER bm 
where sm.iloan_code = ss.iloan_code 
    and sm.bo_code = bm.bo_code 
    and ss.ILOAN_CODE in (select distinct loan_Number from SVP_LOAN_MASTER_INVENTORY) 
+0

你的表有哪些索引? –

+0

你好布赖恩,我有非独特的索引 –

+0

请张贴他们。 –

回答

2
and ss.ILOAN_CODE in (select distinct loan_Number from SVP_LOAN_MASTER_INVENTORY) 

这是正在缓慢候选人。您在这里不需要distinct,也请使用显式连接来提高可读性。

尝试:

Select 
null id, 
ss.ILOAN_CODE , 
ss.INST_NUM , 
ss.INST_AMT , 
ss.INST_PRINCIPAL , 
ss.INST_INTEREST , 
ss.BALANCE_PRINCIPAL , 
ss.INST_DUE_DATE , 
ss.PAID_FLAG , 
ss.LATE_FEE , 
ss.PAYMENT_DATE , 
ss.INST_AMT_PAID , 
ss.INST_AMT_DUE , 
ss.REV_CHECK_NUM , 
ss.REV_CHECK_AMT , 
ss.CREATED_BY , 
ss.DATE_CREATED , 
ss.UPDATED_BY , 
ss.DATE_UPDATED , 
ss.INST_DAYS , 
ss.MATURED_INTEREST , 
ss.UNPAID_INTEREST , 
ss.ADJ_INST_PRINCIPAL , 
ss.ADJ_INST_AMT , 
ss.ADJ_INST_INTEREST , 
ss.ADJ_BALANCE_PRINCIPAL , 
ss.ADJ_MATURED_INTEREST , 
ss.ADJ_UNPAID_INTEREST , 
ss.IS_PRINTED , 
ss.RTN_FEE_AMT , 
ss.WAIVE_FEE_AMT , 
ss.LATE_FEE_AMT , 
ss.APR_BALANCE_PRINCIPAL , 
ss.ACHDEPOSIT_DATE , 
ss.ACHRETURN_DATE , 
ss.ACHCLEAR_DATE , 
ss.APR_INST_INTEREST , 
ss.APR_UNPAID_INTEREST , 
ss.CSO_FEE , 
ss.MATURED_CSO_FEE , 
ss.UNPAID_CSO_FEE , 
ss.CSO_FEE_BALANCE 
from ST_IL_SCHEDULE ss, 
    inner join ST_IL_MASTER sm on (sm.iloan_code = ss.iloan_code) 
    inner join BO_MASTER bm on (sm.bo_code = bm.bo_code) 
    inner join SVP_LOAN_MASTER_INVENTORY slm on (ss.loan_code = slm.loan number) 

如果没有帮助,请考虑创建上用于连接列的索引。

+0

Hello Kacper,谢谢它让我的数据更快。我正在测试以查看我获得的数据是否与生产完全匹配。 –

+0

@ user2148257查询完全一样,但始终值得检查。祝你好运。 – Kacper

+0

Hello Kacper,我测试了pentaho中的代码,它需要太长时间才能读取查询,但实现了与您所提到的相同的方法(内部连接和删除不同)它适用于其他查询。但是对于这个特定的桌子它不起作用。请能改变它任何其他方式。请这会有所帮助。谢谢 –