Sql server 使用sqlserver视图可以提高性能吗?

Sql server 使用sqlserver视图可以提高性能吗?,sql-server,views,tree-left-right,Sql Server,Views,Tree Left Right,我有一个sql函数,它在左右树中查找某个节点的父节点。这需要很多时间。如果我为每个节点创建一个存储其父节点的视图,这会加快速度吗?(然后我会要求视图获取父节点)。是的,这会加快速度。让视图返回子id和父详细信息 通过这种方式,您可以使用子id从表连接到视图。每次访问视图(以及基础函数)时都会重新评估它,因此创建视图不会有任何改进 事实上,通过删除UDF并使用它查找父节点,您很可能会加快速度: SELECT mpp.id FROM mytable mc CROSS APPLY

我有一个sql函数,它在左右树中查找某个节点的父节点。这需要很多时间。如果我为每个节点创建一个存储其父节点的视图,这会加快速度吗?(然后我会要求视图获取父节点)。

是的,这会加快速度。让视图返回子id和父详细信息

通过这种方式,您可以使用子id从表连接到视图。

每次访问视图(以及基础函数)时都会重新评估它,因此创建视图不会有任何改进

事实上,通过删除
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
不是很有效。它是为不允许递归查询的遗留系统而设计的,但对于大多数现代数据库系统,邻接列表的效率要高得多

有关详细信息,请参阅我的博客中的这篇文章: