Я, вероятно, немного отклонился от первоначального вопроса, но здесь я иду:
Как предлагается в комментариях, учитывая, что вы можете позволить себе переписать, вы должны исследовать другой способ моделирования вашей древовидной структуры, особенно учитывая, что у вас есть "фиксированная глубина", которая довольно управляема с другим подходом.
В своем «Искусстве SQL» Фарульт предпочитает подход, основанный на представлении положения узла в строковом поле, кодирующем «ветвь», в которой живет узел. (Для обзора книги и небольшого обсуждения см. эту ветку Slashdot ).
Вот онлайн-пример того, что я имею в виду - в «Искусстве SQL» есть целый раздел книги, посвященный этому, в котором сравниваются три различных подхода (Nested Sets, Parent / Таблица дочерних отношений, поле «Кодированный путь» и использование в качестве примера боевого порядка армий в Ватерлоо (с множеством запросов, таких как «Перечислите все батальоны под командованием генерала X» или «Найдите, кто был командующим артиллерийской группы Y»).
Фарулт довольно фанатичен в отношении производительности, и вся книга представляет собой сборник, не относящийся к конкретным поставщикам, очень полезных и практических советов о том, как (пере) писать эффективные запросы.