大家常见的树形结构是如何设计存储的,查询,修改的时候方便吗?
之前我一直使用的是 id ,name ,parent_id 的方案,但是后来发现查询子节点的时候特别不方便,哪怕最优的方案也需要查询 n(树的层数)次,不知道大家有没有什么好的查询策略或者数据存储方案
之前我一直使用的是 id ,name ,parent_id 的方案,但是后来发现查询子节点的时候特别不方便,哪怕最优的方案也需要查询 n(树的层数)次,不知道大家有没有什么好的查询策略或者数据存储方案
|
hidemyselfJan 21, 2022
1
闭包表?
|
|
zxabitionJan 21, 2022
2
加个 path 字段?,然后维护好这个字段?
这种: id code path 1348900982112034817 100101 [0],[1348900982044925953] 1348900982195920898 10010101 [0],[1348900982044925953],[1348900982112034817] 1348900982275612674 10010102 [0],[1348900982044925953],[1348900982112034817] 1348900982497910786 100102 [0],[1348900982044925953] 1348900982565019649 10010201 [0],[1348900982044925953],[1348900982497910786] 1348900982632128513 10010202 [0],[1348900982044925953],[1348900982497910786] 1348900982699237377 100103 [0],[1348900982044925953] |
|
BronyaJan 21, 2022
3
|
|
4
我上个月刚写了一篇文章:《 MySQL Tree 存储方案 》 https://www.dbkuaizi.com/archives/142.html
|
|
5
多谢楼上的各位大佬,我参考下看看我们项目适合哪种
|
|
hteenJan 21, 2022
6
数据少 闭包表
数据多 path 字段+fullindex |
|
fmumuJan 21, 2022
8
数据不多,就一次查出来,程序里递归处理
数据多就懒加载呗 要不就和行政区划一样,上级 id 做下级的前缀 |
|
mx1700Jan 21, 2022 via Android
9
Mysql 8 支持递归查询,如果深度不深效率还可以
|
|
golangLoverJan 21, 2022 via Android
10
用 json, 存 string
|
|
rabbbitJan 21, 2022
11
搭车问个问题:
这种 parentId 存树形结构的怎么查询比较快? 树不限深度, 总节点数在 1 万个左右.直接写 SQL 还是全查出来然后用 Java 处理, |
|
rabbbitJan 21, 2022
12
说错了,不是 1 万个节点.是查出来的数据量有 1 万条左右.
|
|
pellozJan 21, 2022
13
一般来说,数据不会有很多层,那么上级 id 做下级的前缀其实很可行
|
|
garfeildmaJan 21, 2022
14
推荐《 SQL 反模式》,里边专门一章讲这个问题的
|
|
RuLaiFoJan 22, 2022 via Android
15
可以去了解一下 mptt 查询很快,但是添加删除会更新整个树,根据业务看你的树有多大(没测试过性能极限值),几百个节点应该还是可以的。
|
|
AkiyaJan 22, 2022 via iPhone
16
图数据库了解一下
|