Driving_site подсказка для нескольких удаленных таблиц - PullRequest
0 голосов
/ 21 сентября 2019

У меня есть запрос следующего формата.Он использует две удаленные таблицы и локальную таблицу.

SELECT *
FROM table1@db2 t1 INNER JOIN table2@db2 t2 -- two large remote tables on the same DB
  ON t1.id = t2.id
WHERE t1.prop = '1'
 AND t2.prop = '2'
 AND t1.prop2 IN (SELECT val FROM tinylocaltable)

Мне интересно, как правильно использовать подсказку запроса DRIVING_SITE, чтобы перенести основную часть работы на db2 (т. Е. Обеспечить соединение и условияприменяется на db2).Большинство примеров DRIVING_SITE, которые я вижу, ссылаются только на одну удаленную таблицу.Достаточно ли SELECT /*+DRIVING_SITE(t1)*/ * или мне нужно указать обе удаленные таблицы (t1 и t2) в подсказке?Если последнее, каков правильный синтаксис?

(Если вам интересно, почему это не выполняется на db2, для начала, это потому, что это фактически один UNION ALL раздел большего запроса,где остальные UNION ALL разделы используют локальную БД).

1 Ответ

0 голосов
/ 21 сентября 2019

Подсказка DRIVING_SITE указывает оптимизатору выполнить запрос на сайте, отличном от выбранного базой данных

В вашем запросе используется

FROM table1@db2 t1 INNER JOIN table2@db2 t2

, где обе таблицынаходятся на одном и том же "другом сайте", поэтому

SELECT /*+ DRIVING_SITE(t1)*/ 

должно быть в порядке (по моему мнению. В документации не найдено ничего, что предлагало бы другое).

...