如何使这个Oracle select语句执行得更快?

时间:2017-02-24 14:09:31

标签: sql oracle optimization query-performance

请问有关如何使此查询执行速度比目前更快的建议吗?

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

1 个答案:

答案 0 :(得分: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);

这些索引是使用查询的最佳顺序列创建的,并且它们包括在选择列表中找到的其他非连接列,因此可以使用仅索引访问(避免任何访问实际表的需要) )。