2017-02-24 39 views
2

請問如何讓這個查詢的執行速度比目前更快?如何使這個Oracle select語句執行得更快?

T2.ADI is indexed on TABLE2 
T1.ADI is indexed on TABLE1 
T1.RC AND T1.BEG_DT_TM is composite indexed on TABLE1 

我還能做些什麼來使其更快嗎?

SELECT T1.ASI, T1.RC, T1.BEG_DT_TM 
FROM TABLE1 T1 
INNER JOIN TABLE2 T2 
    ON T2.ADI = T1.ADI 
    AND T2.END_DT_TM > T1.BEG_DT_TM 
    AND T2.BEG_DT_TM <= T1.END_DT_TM 
WHERE T1.RC IN (12345, 56764460, 49862, 375723) 
    AND T1.BEG_DT_TM >= 
    AND T1.BEG_DT_TM <= 
    AND T1.END_DT_TM >= 
    AND T1.END_DT_TM <= 

這裏是解釋計劃: enter image description here

+0

我假設你運行了一個解釋計劃來查看大部分時間都花在哪裏。你能告訴我們嗎?那麼 - 統計數據是否是最新的?在任何情況下,連接條件都會使查詢變慢,而不管其他任何事情。 – mathguy

+0

謝謝@mathguy我在 –

+0

以上附加了解釋計劃,這是什麼「AND T1.BEG_DT_TM> =」?缺少條件的右側。 「更快」是什麼意思?多久時間?表和結果集中有多少行? – OldProgrammer

回答

0

covering索引兩個表:

create index t1_c_1 on TABLE1(RC, BEG_DT_TM, END_DT_TM, ADI, ASI); 
create index t2_c_1 on TABLE2(ADI, BEG_DT_TM, END_DT_TM); 

這些索引在查詢中的最優順序與列上創建,加它們包括在選擇列表中找到的其他非連接列,因此可以使用僅索引訪問(避免任何需要訪問實際表)。