MySQL でストアド プロシージャを作成しようとしています。複雑な理由から、オブジェクト ID を調べるために多数の結合を含む集計クエリを作成し、さらに結合 (同じテーブルを含む) を使用して別のクエリを実行してデータを取得します。
したがって、次のようなものです。
CREATE TEMPORARY TABLE ids ENGINE=MEMORY
SELECT MAX(child.id)
FROM parent
JOIN child ON child.parent_id = parent.id
WHERE
GROUP BY child.parent_id;
SELECT *
# MUST SELECT STUFF FROM PARENT, CHILD, AND STUFF JOINED ON CHILD
FROM child
JOIN parent ON parent.id = child.parent_id
# A BUNCH MORE JOINS HERE
WHERE child.id IN (SELECT * FROM ids);
DROP TEMPORARY TABLE IF EXISTS ids;
ここで、最初の選択に 0.000 秒かかることに気付きました。(SELECT * FROM ids) を (1435,2352,43653,34534,...) のような定数リストに置き換えると、2 番目の選択にも 0.000 秒かかります。
ただし、一時テーブルの作成で両方を実行すると、0.6 秒かかります。0.o WTH?
私の質問は、この一時テーブルの作成をスキップして、ID のリストを渡す方法です。
また、最初の選択全体をサブ選択として 2 番目の選択に移動すると、手順全体に時間がかかります。待つことをあきらめる1分以上。