Показать сообщение отдельно
Старый 07.08.2008, 10:52   #10  
vallys is offline
vallys
Developer
 
146 / 108 (0) +++++
Регистрация: 18.01.2005
Цитата:
Сообщение от Qaz Qwerty Посмотреть сообщение
Спасибо огромное, помогло, работает и правда долго (минуты 3), но работает.
Ну...
1. Для таблицы UtilIdElements искать можно/достаточно либо по name либо по id. Обновление: Не прав. Фильтрацию по id в общем случае желательно избегать (см. ниже).
2. На таблице UtilIdElements есть уникальные индексы [recordType, parentId, name, utilLevel] и [recordType, parentId, id, utilLevel], а в вашей задаче все искомые узлы, как я понял, не имеют родителей. Соответственно, добавив в условия выборокк из UtilIdElements поле parentId (и удалив name либо id), получите прибавку к скорости.
3. С помощью xUtilIDElements::getNode() вы получаете узел на произвольном слое utils1.utilLevel, а не на последнем. Конечно на практике может получится, что select firstonly utils1 возвращает как раз запись с последним слоем, но все-таки надеяться на это не стоит. Использование order by utilLevel desc или info.getNode() или др. get/find node поможет, если схему не менять.
4. Встречался со случаями, когда в UtilElements отсутствовали записи для последних слоев (см. еще тут).
5. Если задачу решать через UtilElements/UtilIdElements, то можно попробовать один select для UtilElements/UtilIdElements, а не два - ну это уже имхо.

Последний раз редактировалось vallys; 19.08.2008 в 09:48.
За это сообщение автора поблагодарили: Qaz Qwerty (1).