寻求高手相助,一个查询统计问题

bsd 2005-03-23 10:51:55
有这样一种树状结构的数据,层次不确定
注:括号中的数值是指该类型节点在父节点中的个数,如A1中有2个B1,3个C1,等等
A1
|-B1(2)
| |-D1(3)
| |-D2(2)
| |-E3(5)
|
|-C1(3)
| |-F1(3)
| |-D2(5)
| |
| |-B1(3)
| | |-D1(3)
| | |-D2(2)
| | |-E3(5)
| |
| |-B2(2)
| | |-D1(2)
| | |-E3(3)
| |
|-E1(1)

现在需要查询某个节点下有多少个特定的子节点,
比如说C1下有多少个E3(即3个B1*5个E3+2个不*3个E3=21个)
或者某个节点下除某些节点以外其他节点下共有多少个特定的子节点
比如说C1下除B2外有多少个E3(即3个B1*5个E3=15个)

考虑到数据量相当庞大
数据库表如何设计比较好,查询语句该怎么写呢
原先的设计方式是建一张包含3个字段的表来描述这棵树
parent, child, number
但是因为数据可能有数千万条
查询的效率成了个大问题
郁闷中!

请诸位高手不吝赐教!谢了先!
...全文
80 1 点赞 打赏 收藏 举报
写回复
1 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
wwwliaole 2005-03-23
不知道你用它来干什么,

一般情况下,因为是层次结构,量又很大,
那么这样的层次用得最多的应该是前三层
所以建议你分四个表来存储,
第一张表用来存储最上层的如table1
依次为table2,table3,
第四长表就存储第四次及以上的数据
table4(id,prent,childNum,div)
childNum 指下一层父ID是id的个数,不包括下一层的下一层的个数.(如果数据库支持视图,这个字段就没有必要)
div,是指树结构的第几层.

注意每次更新记录时更新childNum,因为更新的量只可能是固定的ID,这样的操作会比较小,
这是典型的利用操作的次数来换取查询的速度的做法.



  • 打赏
  • 举报
回复
相关推荐
发帖
MySQL
加入

5.5w+

社区成员

MySQL相关内容讨论专区
申请成为版主
帖子事件
创建了帖子
2005-03-23 10:51
社区公告
暂无公告