2009-12-04 2 views
1

У меня есть функция sql, которая ищет родителя определенного узла в левом дереве справа. Это занимает много времени. Если я создаю представление, которое хранит для каждого узла его родителя, это ускорит работу? (Я бы попросил представление получить родительский узел).Можете ли вы улучшить производительность с помощью представлений sqlserver?

ответ

3

Вид (и основная функция) будет пересматриваться каждый раз при его доступе, поэтому создание представления ничего не улучшит.

В самом деле, вы, скорее всего, ускорить процесс, удалив UDF и просто использовать это, чтобы найти свой родительский узел:

SELECT mpp.id 
FROM mytable mc 
CROSS APPLY 
     (
     SELECT TOP 1 id 
     FROM mytable mp 
     WHERE mp.lft BETWEEN m.lft AND m.rgt 
     ORDER BY 
       mp.lft DESC 
     ) mpp 

, особенно если у вас есть индекс по lft, который охватывает также rgt:

CREATE INDEX ON mytable (lft) INCLUDE (rgt) 

Вложенные модели модели не очень эффективны для SQL Server. Он был разработан для устаревшей системы, которая не позволяет рекурсивных запросов, но для большинства современных списков смежности систем баз данных гораздо эффективнее.

Смотрите эту статью в своем блоге подробности:

0

Да, это должно ускорить процесс. Имейте представление, возвращающее дочерний идентификатор пользователя и . Дополнительная информация.

Таким образом, вы можете присоединиться к вашему столу к виду, используя идентификатор ребенка .

Смежные вопросы