我有一个sql函数,它查找左右树中某个节点的父节点。这需要很多时间。如果我创建一个为每个节点存储其父节点的视图,那会加快速度吗? (然后我会要求视图获取父节点)。
答案 0 :(得分:3)
每次访问视图(和底层函数)时都会重新评估,因此创建视图不会改进任何内容。
事实上,你最有可能通过删除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
效率不高。它是为遗留系统设计的,不允许递归查询,但对于大多数现代数据库系统,邻接列表更有效。
有关详细信息,请参阅我的博客中的这篇文章:
答案 1 :(得分:0)
是的,这应该可以加快速度。让视图返回子ID 和父级详细信息。
这样您就可以使用子ID 从表格加入视图。