1

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

4

2 回答 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 回答