「隣接リスト」メソッドを使用してツリー階層を定義する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>);
この 2 番目のクエリは非常に低速です。特定の親の子の数は非常に少なく、10 を超えることはめったになく、20 を超えることもありません。EXPLAIN はサブクエリが依存していると言っていますが、私の目には相関サブクエリのようには見えません。MySQL 5.1 でテストしています。nodes.id
が主キーで、 に BTREE インデックスがありnodes.parent
ます。このクエリの速度を向上させる方法はありますか?