注:現在、問題のクエリをsqlite3 DBで実行していますが、他のDBMSの専門知識からの回答は歓迎すべき洞察になります...
クエリオプティマイザが、繰り返されるクエリ/サブクエリを識別し、実行する場合は1回だけ実行しようとするのではないかと思いました。
これが私の例のクエリです:
SELECT *
FROM table1 AS t1
WHERE t1.fk_id =
(
SELECT t2.fk_id
FROM table2 AS t2
WHERE t2.id = 1111
)
OR t1.fk_id =
(
SELECT local_id
FROM ID_MAP
WHERE remote_id =
(
SELECT t2.fk_id
FROM table2 AS t2
WHERE t2.id = 1111
)
);
ネストされたクエリ
SELECT t2.fk_id
FROM table2 AS t2
WHERE t2.id = 1111
一度だけ実行されます(そしてその結果はさらにアクセスするためにキャッシュされます)?
この例では、2回しか実行されない単純なクエリであるため、大したことではありませんが、実際のプログラムでは、さらに4〜5回(x2、子レコードごとに2回、実際には8〜10回)実行する必要があります。 (外部キーによってバインドされた、親レコード(table2)に関連付けられたすべての子レコード(table1)を取得します。また、IDマッピングテーブルをチェックして、ローカルで生成されたIDと実際の/更新されたIDの両方をクエリすることを確認します。 /新しいキー)。
私はこれでどんな助けにも本当に感謝します、ありがとう。