如何在SQL Server在2005年实现高性能树视图
技术问答
484 人阅读
|
0 人回复
|
2023-09-14
|
建立代表树表格的最佳方法是什么?我想实现一个select,insert,update和delete,它能很好地处理大数据。例如,选择必须支持全扩展-获取给定节点的所有子项(以及那里的子项)。9 e! \' d$ Z# R+ {6 A; R
8 S2 ]! q% t- p5 g7 I 解决方案: ; w' w* B$ z& t- _/ |$ H
使用CTE。2 K* v q. n8 ~# B/ b: c/ A$ f/ G7 A
给定树表结构:
U! i1 \8 R+ Kid parent name Electronics2 1 TV3 3 1 Hi-Fi4 2 LCD5 5 2 Plasma6 3 3 Amplifiers7 3 3 Speakers此查询将返回id,parent树木的深度水平有序:
8 h* B' d- p+ C& ?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 )SELECT *FROM vid parent name Electronics2 TV4 2 2 LCD5 5 2 Plasma3 Hi-Fi6 3 3 Amplifiers7 3 Speakers更换parent = 0用parent = @parent只得到一棵树的一个分支。: B& x8 M8 z8 N6 G
假如上面有索引table (parent),此查询将有效地处理大表,因为它将递归到 INDEXLOOKUP找到每个父级的一切chilrden。
: H+ D+ Y' d2 W8 h" {请更新分支:0 f# f* d: c+ ~! A: _" Y
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分支的根在哪里。 |
|
|
|
|
|