Mar*_*ian 4 sql optimization query-optimization
假设有一个被调用的表tree_node,它调用了主键,id并且调用了一个可空列,parent_id并且该表嵌入了一个树结构(或一个林),如何以有效的方式计算树/林中节点的深度在SQL?
你需要递归功能.使用递归查询,这将是:
WITH RECURSIVE node_ancestors(node_id, parent_id) AS (
SELECT id, id FROM tree_node WHERE id IN (1, 2, 3)
UNION ALL
SELECT na.node_id, tree_node.parent_id
FROM node_ancestors AS na, tree_node
WHERE tree_node.id = na.parent_id AND tree_node.parent_id IS NOT NULL
)
SELECT node_id, COUNT(parent_id) AS depth FROM node_ancestors GROUP BY node_id;
Run Code Online (Sandbox Code Playgroud)
其他选项是在存储过程中进行递归,在应用程序中执行递归并限制递归量并使用大量连接.(对于非平凡的深度,最后一个选项并不是真正有效)