40以上の同じ構造のデータベースを1つの統合データベースに統合するプロセスがありますが、唯一の違いは、統合データベースが各テーブルにproject_idフィールドを追加することです。
可能な限り効率的にするために、レコードが追加/変更された場合にのみ、ソースデータベースから統合データベースにレコードをコピー/更新しようとしています。統合データベースから古いレコードを削除してから、存在しないレコードをコピーします。古い/変更されたレコードを削除するには、次のようなクエリを使用しています。
DELETE FROM <table>
WHERE NOT EXISTS (SELECT <primary keys>
FROM <source> b
WHERE ((<b.fields = a.fields>) or
(b.fields is null and a.fields is null)))
AND PROJECT_ID = <project_id>
これはほとんどの部分で機能しますが、ソースデータベースのテーブルの1つに700,000を超えるレコードがあり、このクエリが完了するまでに1時間以上かかります。
このクエリをより効率的にするにはどうすればよいですか?