sasha пишет:
Даты не понял ничего. Надо чтобы количество записей, прочитанных сервером, было равно кол-ву записей, возвращённых запросом. А у нас оптимизатор лажается на запросах типа WHERE 1 = 0 и перелопачивает всю таблицу. Поэтому для всех максимальных уровней сервер будет перелопачивать в пустую все их подуровни, что может сильно ухудшить производительность на широких деревьях.

А то что вы нагородили с контекстами работало и без контекстов (и быстрее и проще).
Ага, разобрался, ступил... ;-)

А по теме: у тебя в запросе услоаин соединения:
WHERE PARENT_ID = TR.ID AND TR.LEV < 1
Вот если бы порядок вычисления был бы с лева на право, то перестановка условий сразу бы позволила отсечь уровень.
Но, это, как я понимаю, сильно зарежет возможности оптимизатора.

Про [MAX LEVEL N] - мне кажеться, лучшей была бы возможность явно указать условие завершения рекурсии.
Например: WITH RECURSIVE [ON <condition>]
В твоём случае как раз WITH RECURSIVE ON TR.LEV < 5

Ответить