Оптимизация SQL: СОЕДИНИТЬ ПО ... НАЧАТЬ С - PullRequest
0 голосов
/ 14 октября 2011

У меня есть запрос с использованием операторов CONNECT BY и START WITH, как показано ниже. Выполнение запроса в предложении IN заняло менее 5 секунд и возвращает 3000 строк. fact_table содержит 20 миллионов записей. Как я могу оптимизировать этот SQL ниже, потому что этот запрос выполняется вечно: (

SELECT DISTINCT CONNECT_BY_ROOT a.dst_ID_key AS root_ID_key, a.src_ID_key
  FROM fact_table a
  CONNECT BY NOCYCLE PRIOR a.src_ID_key = a.dst_ID_key
   START WITH a.dst_ID_key IN (SELECT b.ID_key
                           FROM TableA b
                           JOIN TableB c
                             ON (c.name = b.name AND c.school = b.school)
                          WHERE b.status = 'Active')

1 Ответ

0 голосов
/ 14 октября 2011

Использование "in" очень медленно.
Если эти данные не требуют обновления в реальном времени.
Я думаю, что вы можете попробовать это:
1 、 Не используйте отчетливый
2. Используйте табличное соединение вместо «in»
3 、 Использовать материализованный вид
Надежда помогает. Ждите лучшего ответа тоже. :)

...