【发布时间】:2009-12-04 12:29:51
【问题描述】:
我有一个 sql 函数,它在左右树中查找某个节点的父节点。这需要很多时间。如果我创建一个为每个节点存储其父节点的视图,这会加快速度吗? (然后我会要求视图获取父节点)。
【问题讨论】:
标签: sql-server views tree-left-right
我有一个 sql 函数,它在左右树中查找某个节点的父节点。这需要很多时间。如果我创建一个为每个节点存储其父节点的视图,这会加快速度吗? (然后我会要求视图获取父节点)。
【问题讨论】:
标签: sql-server views tree-left-right
每次访问时都会重新评估视图(和底层函数),因此创建视图不会有任何改进。
事实上,您很可能会通过删除 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 不是很有效。它是为不允许递归查询的遗留系统设计的,但对于大多数现代数据库系统来说,邻接表的效率要高得多。
详情请看我博客中的这篇文章:
【讨论】:
是的,这应该会加快速度。让视图返回 child id 和 parent 详细信息。
通过这种方式,您可以使用 child id 从表连接到视图。
【讨论】: