"WildSery"
>> даёт
>> PLAN MERGE (SORT (SORT (AA NATURAL)), SORT (SORT (AA NATURAL)))
>
>Только я не понял, почему два сорта вложенных.
>Если написать без order by,
>
>select * from
>(select id1 from new_procedure) as q1
>join
>(select id2 from new_procedure1) as q2
>on q1.id1 = q2.id2
>
>то план будет нормальным,
>PLAN MERGE (SORT (AA NATURAL), SORT (AA NATURAL))
>
>Зачем он два раза сортирует?
Он не понимает, что данные уже отсортированы внутренним ORDER BY.
Мой пример был в общем виде, не обязательно для процедур. Для подзапроса
не из процедур ORDER BY нужен именно для того, чтобы рез-ты подзапроса
материализовались и к ним был применён MERGE JOIN (иначе оптмизатор выберет
LOOP JOIN и будет выполнять внутренний подзапрос на каждую запись внешнего)
--
Хорсун Влад