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