【问题标题】:Count number of children in limited depth tree计算有限深度树中的子节点数
【发布时间】:2011-03-07 11:36:29
【问题描述】:

我在 MySQL 中有一个树结构,每个节点都有一个 parent_id 字段。结构相当大,但只有大约 8 层深。每个节点也有一个 child_counter 字段。

我正在寻找一种高效的方法来计算(和更新)每个节点的子节点数量(按子节点计算,我包括子节点的子节点等),最好不要使用太多的 SQL 调用。我不指望这会超级快,刚刚好。

我希望随着算法的迭代,可能有一些方法可以进行大规模更新。

【问题讨论】:

    标签: mysql sql tree parent-child


    【解决方案1】:

    我以前实现过类似的东西,但不完全是。您是否能够在每个节点上存储一个“深度”整数,以标记它们在树中的深度?如果是这样,您可以使用 8 个查询来执行此操作,如果索引正确,这将是非常合理的。我认为是这样的(手边没有mysql)。您将从最低深度​​(即 8)向上查询: UPDATE Node SET child_counter = ((SELECT SUM(child_counter) FROM Node WHERE parent_id = id) + (SELECT COUNT(0) FROM Node WHERE parent_id = id)) WHERE depth = x

    【讨论】:

    • 在发现您的解决方案是迄今为止最快的解决方案之前,我们花了一整天时间研究各种选项,谢谢!
    【解决方案2】:

    这是一篇好文章:Managing Hierarchical Data in MySQL

    您当前正在使用带有额外计数列的邻接列表模型。但实际上,您尝试从分层数据中获取的内容看起来可以使用 嵌套集模型更轻松地建模。

    【讨论】:

    • 我们最初确实考虑过这种方法,但当时并不合适。现在合适了,我们没有时间对系统进行如此大幅度的更改......
    猜你喜欢
    • 2021-01-02
    • 1970-01-01
    • 1970-01-01
    • 2014-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多