Учитывая следующий пример запроса:
SELECT * FROM (SELECT * FROM A
JOIN B ON B.AID=A.ID JOIN C ON C.BID=B.ID) WHERE ROWNUM < 100
И при условии, что все эти таблицы имеют огромное количество строк.
Если я форсирую вложенные циклы (используя подсказку use_nl или FIRST_ROWS) - тогда запрос эффективно ищет только первые 100 соответствующих записей, как и ожидалось - по сравнению с хеш-соединением, которое всегда должно загружать таблицы в память.
Что меня действительно смущает, так это то, что согласно всем учебникам, которые я прочитал, - прежде чем присоединиться к C, Oracle должен сначала завершить объединение A и B и только затем соединить временный набор результатов с C.
В этом примереэто определенно не работает, иначе запрос будет выполняться очень медленно.Похоже, что он обрабатывает строки один за другим - то есть, как в конвейере.Но я не могу найти подтверждения этому поведению.
Было бы замечательно, если бы кто-то разъяснил мне это.
Заранее спасибо.