我在MySQL中有一个树结构,每个节点都使用parent_id字段。结构非常大,但只有大约8层深。每个节点还有一个child_counter字段。
我正在寻找一种高效的方法来计算(和更新)每个节点所拥有的子节点数(由孩子们包括孩子的孩子等),最好是没有太多的SQL调用。我不认为这是超级快,只是足够好。
我希望在算法迭代时可以通过某种方式进行批量更新。
答案 0 :(得分: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
答案 1 :(得分:1)
这是一篇好文章:Managing Hierarchical Data in MySQL
您目前正在使用带有附加计数列的邻接列表模型。但实际上,您尝试从分层数据中获得的内容看起来可以使用嵌套集模型更轻松地建模。