Re: Подсчет детей в дереве
От: ShAlexNik Россия  
Дата: 13.02.03 14:56
Оценка: 11 (1)
Изменения ускоряющие запрос (без изменения алгоритма):
1. Заменяем временную таблицу в базе данных на таблицу в памяти, да и поддержка целостности не нужна:
    declare @ChildNodeList table ( ID_NODE int, LEV int )

2. Изменяем запрос в цикле перенеся ограничения выборки из директивы WHERE в директиву FROM, т.к. вложенные запросы в WHERE выполняются для каждого кортежа в таблице существенно тормозя:
INSERT @ChildNodeList
SELECT DISTINCT N.ID_NODE, @lev 
  FROM NODE N
  inner join @ChildNodeList CNL on CNL.ID_NODE = N.ID_PARENT
  left outer join @ChildNodeList CNL2 on CNL2.ID_NODE = N.ID_NODE
WHERE CNL2.ID_NODE is null


Вот и все. На первый взгляд.
Желаю удачи!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.