【问题标题】:Can you improve performance with sqlserver views?您可以使用 sqlserver 视图提高性能吗?
【发布时间】:2009-12-04 12:29:51
【问题描述】:

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

【问题讨论】:

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


    【解决方案1】:

    每次访问时都会重新评估视图(和底层函数),因此创建视图不会有任何改进。

    事实上,您很可能会通过删除 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 不是很有效。它是为不允许递归查询的遗留系统设计的,但对于大多数现代数据库系统来说,邻接表的效率要高得多。

    详情请看我博客中的这篇文章:

    【讨论】:

      【解决方案2】:

      是的,这应该会加快速度。让视图返回 child idparent 详细信息

      通过这种方式,您可以使用 child id 从表连接到视图。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-04-27
        • 2014-07-11
        • 1970-01-01
        • 1970-01-01
        • 2020-08-16
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多