小さなテーブル (〜 400 行) と大きなテーブル (〜 1500 万行) の 2 つのテーブルがあり、大きなテーブルに関連付けられたエントリを持たない小さなテーブルからレコードを見つけようとしています。
クエリで大きなパフォーマンスの問題が発生しています。
クエリは次のとおりです。
SELECT * FROM small_table WHERE NOT EXISTS
(SELECT NULL FROM large_table WHERE large_table.small_id = small_table.id)
列は、プライマリ キーであるlarge_table.small_id
small_table のid
フィールドを参照します。クエリ プランは、外部キー インデックスが large_table に使用されていることを示しています。
PLAN (large_table (RDB$FOREIGN70))
PLAN (small_table NATURAL)
両方のテーブルのインデックスの統計が再計算されました。
クエリの実行には数時間かかります。これは期待されていますか?
- もしそうなら、より速くなるようにクエリを書き直すことはできますか?
- そうでない場合、何が間違っている可能性がありますか?