回答

收藏

如何在SQL Server在2005年实现高性能树视图

技术问答 技术问答 530 人阅读 | 0 人回复 | 2023-09-14

建立代表树表格的最佳方法是什么?我想实现一个select,insert,update和delete,它能很好地处理大数据。例如,选择必须支持全扩展-获取给定节点的所有子项(以及那里的子项)。& k  R/ U1 H' N' F9 M# p
                                                                & V% `* _+ C6 y+ F* P8 h& Z0 x
    解决方案:                                                               
) `1 `3 c/ R5 W( Z" d* a                                                                使用CTE。
: h- r& U( g& `8 p0 p- [给定树表结构:1 W) j2 s/ q: s: h
id parent name                                                                   Electronics2 1      TV3 3 1              Hi-Fi4 2         LCD5 5 2                                                            Plasma6 3 3              Amplifiers7 3 3                  Speakers此查询将返回id,parent树木的深度水平有序:
6 C6 ^, p* W. kWITH    v (id,parent,level) AS   SELECT  id,parent,        FROM    table        WHERE   parent =        UNION ALL        SELECT  id,parent,v.level           FROM    v        JOIN    table t        ON      t.parent = v.id        )SELECT  *FROM    vid parent name                                                                   Electronics2          TV4 2 2                                                                                                                                                                                                                                                                                                                                                                            LCD5 5 2                         Plasma3          Hi-Fi6 3 3             Amplifiers7  3          Speakers更换parent = 0用parent = @parent只得到一棵树的一个分支。$ h( c2 w; o( }2 b" L3 Q! @1 J
假如上面有索引table (parent),此查询将有效地处理大表,因为它将递归到 INDEXLOOKUP找到每个父级的一切chilrden。- s* h4 k1 l4 a8 \8 w; f
请更新分支:
8 D5 E. k* f% `0 D7 d/ A6 A( e$ _WITH    v (id,parent,level) AS   SELECT  id,parent,        FROM    table        WHERE   parent =        UNION ALL        SELECT  id,parent,v.level           FROM    v        JOIN    table t        ON      t.parent = v.id        )UPDATE  table tSET     column = newvalueWHERE   t.id IN   SELECT  id        FROM    v        )@parent分支的根在哪里。
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则