Oracle使用多个join语句提示多个索引

时间:2019-02-11 07:05:01

标签: sql oracle query-performance

我有一个如下查询:

SELECT /*+ INDEX(A T1_IX01) INDEX(A T1_IX02) INDEX(B T2_IX01) INDEX(C T2_IX01)*/
       *
FROM   T1 A
JOIN   T2 B
ON     A.SOURCE = B.C1
JOIN   T2 C
ON     A.TARGET = C.C1;

我需要使用T1中的2个索引,该索引是我用SOURCE列创建的,而另一个是TARGET列,该索引的值也与T2的C1进行了映射。

在当前状态下,它仅使用T1中的一个索引作为第一个提示,而不使用后一个。 总而言之,我想将在同一表上创建的两个不同的索引用于两个单独的联接。

为什么以及如何解决此问题以获得更快的结果?

1 个答案:

答案 0 :(得分:0)

显然,我已向优化程序提示使用哈希联接而不是使用创建的索引,然后性能提高了很多。任何其他想法将不胜感激。

SELECT /*+ use_hash */
       *
FROM   T1 A
JOIN   T2 B
ON     A.SOURCE = B.C1
JOIN   T2 C
ON     A.TARGET = C.C1;