Можете ли вы улучшить производительность с представлениями sqlserver?

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

2 ответа

Решение

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

Фактически, вы, скорее всего, будете ускорять процесс, удаляя 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, Он был разработан для унаследованных систем, которые не допускали рекурсивных запросов, но для большинства современных систем баз данных список смежности гораздо эффективнее.

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

Да, это должно ускорить процесс. Пусть представление вернет идентификатор ребенка и детали родителя.

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

Другие вопросы по тегам