Sql server 使用sqlserver视图可以提高性能吗?
我有一个sql函数,它在左右树中查找某个节点的父节点。这需要很多时间。如果我为每个节点创建一个存储其父节点的视图,这会加快速度吗?(然后我会要求视图获取父节点)。是的,这会加快速度。让视图返回子id和父详细信息 通过这种方式,您可以使用子id从表连接到视图。每次访问视图(以及基础函数)时都会重新评估它,因此创建视图不会有任何改进 事实上,通过删除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
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
不是很有效。它是为不允许递归查询的遗留系统而设计的,但对于大多数现代数据库系统,邻接列表的效率要高得多
有关详细信息,请参阅我的博客中的这篇文章: