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