我正在使用 MySQL 中的一个表,该表使用“邻接列表”方法定义树层次结构,这对我的目的来说应该没问题。
我需要使用(快速)查询计算所有孩子的某个值的最大值
SELECT MAX(N.someValue) AS rate
FROM `nodes` N
WHERE N.parent = <some node id>;
有时我没有那么幸运,不得不与孩子的后代一起工作(它已定义,并且总是引用该树分支中的某个叶节点)。
SELECT MAX(N.someValue) AS rate
FROM `nodes` N
WHERE N.id IN (SELECT N2.descendant FROM `nodes` N2 WHERE N2.parent = <some node id>);
第二个查询很慢。给定父母的孩子数量非常少,很少超过 10,从不超过 20。在我看来,它似乎不是相关的子查询,尽管 EXPLAIN 说子查询是依赖的。我正在 MySQL 5.1 中进行测试。nodes.id
是主键,并且有一个 BTREE 索引nodes.parent
。有没有办法可以提高这个查询的速度?