我有一个 sql 函数,它在左右树中查找某个节点的父节点。这需要很多时间。如果我创建一个为每个节点存储其父节点的视图,这会加快速度吗?(然后我会要求视图获取父节点)。
问问题
536 次
2 回答
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
. 它是为不允许递归查询的遗留系统设计的,但对于大多数现代数据库系统来说,邻接表的效率要高得多。
有关详细信息,请参阅我的博客中的这篇文章:
于 2009-12-09T17:06:43.620 回答
0
是的,这应该加快速度。让视图返回子 ID和父详细信息。
这样,您可以使用子 id从您的表连接到视图。
于 2009-12-04T12:38:28.490 回答