Можете ли вы улучшить производительность с представлениями sqlserver? - PullRequest
1 голос
/ 04 декабря 2009

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

Ответы [ 2 ]

3 голосов
/ 09 декабря 2009

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

Фактически, вы, скорее всего, ускорите процесс, удалив 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 голосов
/ 04 декабря 2009

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...