Подсказка Oracle для нескольких индексов с несколькими операторами соединения - PullRequest
0 голосов
/ 11 февраля 2019

У меня есть запрос, как показано ниже:

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;

, и мне нужно использовать 2 индекса из T1, которые я создал со столбцом SOURCE, а другой - со столбцом TARGET, который сопоставил значение с C1 C1 T2, который также проиндексирован..

В текущем состоянии он использует только один индекс из T1, который указан как первый намек, но не последующий. Подводя итог, я хотел бы использовать два разных индекса, созданных в одной таблице, для двух отдельных объединений.

Почему и как мне решить эту проблему, чтобы получить более быстрый результат?

1 Ответ

0 голосов
/ 12 февраля 2019

Очевидно, я дал совет оптимизатору использовать хеш-соединение вместо созданных индексов, тогда производительность выросла довольно высоко.Любые другие идеи будут оценены.

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