你能用sqlserver视图提高性能吗?

时间:2009-12-04 12:29:51

标签: sql-server views tree-left-right

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

2 个答案:

答案 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 从表格加入视图。