Вложенный цикл в запросе по dblink (Oracle 11g) - PullRequest
1 голос
/ 15 декабря 2011

У меня есть 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 исправит это?)

Спасибо.

1 Ответ

1 голос
/ 16 декабря 2011
...