私はこれをやっていた:
SELECT layerID
FROM layers
WHERE ownerID = ?
AND collectionID = ?
これにより、レイヤーIDの配列が得られ、ループしてそれぞれに対してこれを実行します。
SELECT DATA
FROM drawings
WHERE layerID = ?
そして、それはすべてうまくいきました。だから今、私はそれを1つのステップでやろうとしているので、これを試します:
SELECT DATA , layerID
FROM drawings
WHERE layerID = ANY (
SELECT layerID
FROM layers
WHERE ownerID = ?
AND collectionID = ?
)
しかし、何らかの理由で、メイン クエリのインデックスを使用しませんSELECT DATA etc
。したがって、この 1 つの結合されたクエリは、以前に行っていた個別のクエリと比較して、完了するまでにはるかに長い時間がかかります。(ちなみに、サブクエリはSELECT layerID etc
引き続きインデックスを使用します)。
「EXPLAIN」ステートメントを使用して、クエリを使用しているかどうかを判断しました。
ownerID
テーブルの列とcollectionID
列layers
、およびテーブルの列に個別のインデックスがlayerID
ありdrawings
ます。
クエリのどこが間違っていますか?