У меня есть SQL-запрос в форме
SELECT ... FROM A@DB1 a, B@DB1 b, C@DB2 c
WHERE A.x = B.x and B.y = C.y
, где первые две таблицы представляют собой dblinks для одной базы данных, а последняя - для второй базы данных.Нет доступа к локальным таблицам.
Объясните, что план показывает вложенный цикл, хотя все таблицы большие, и я ожидаю, что в этой ситуации хеш-соединение.(Если бы все таблицы были локальными, я бы ожидал хеш-соединение.)
«План объяснения» выглядит примерно так:
NESTED LOOP
HASH JOIN
REMOTE A
REMOTE B
REMOTE C
Кроме того, обновление статистики, похоже, не дало эффекта.
Может кто-нибудь объяснить, какие факторы влияют на то, как объединения по ссылкам dblink распределяются и передаются удаленным БД?Играет ли какая-либо статистика роль в этом процессе и как?
Кроме того, является ли «вложенный цикл» реальной проблемой или чем-то еще целиком?
Может быть, настоящая проблема заключается в извлечении полного содержимого Aи B локально и присоединение, а не присоединение / фильтрация удаленно.(Возможно, подсказка DRIVING_SITE
исправит это?)
Спасибо.