2016-12-05 56 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中的代碼,它需要太長時間才能讀取查詢,但實現了與您所提到的相同的方法(內部連接和刪除不同)它適用於其他查詢。但是對於這個特定的桌子它不起作用。請能改變它任何其他方式。請這會有所幫助。謝謝 –