2つのテーブルの間に1対1の関係があります。私は、このクエリを使用して、テーブルBに対応する行を持たないテーブルAのすべての行を見つけたい:別のテーブルに対応する行がない行を1つのテーブルで見つける方法
SELECT id
FROM tableA
WHERE id NOT IN (SELECT id
FROM tableB)
ORDER BY id desc
IDは、両方のテーブルの主キーです。プライマリキーインデックスとは別に、私はtableA(id desc)のインデックスも持っています。
H2(Java埋め込みデータベース)を使用すると、tableBのフルテーブルスキャンが実行されます。私は完全なテーブルスキャンを避けたい。
このクエリをすばやく実行するには、どのように書き直すことができますか?どのインデックスをすべきですか?
[WHERE col [NOT] IN(SELECT col FROM othertable) 'を書くたびに、[NOT] EXISTSを使用してリファクタリングする方がよいでしょう。 – topchef