Oracle データベースに、1 対 1 の親子関係を持つテーブルのペアがあります。残念ながら、外部キーは子ではなく親で定義されています。
----------------- -----------------
| messages | | payloads |
----------------- -----------------
| id | | id |
| payload_id |------->| content |
| creation_date | -----------------
-----------------
messages.payload_id
from toの関係はpayloads.id
、遅延不可の外部キーによって強制されます。
メッセージの作成日が特定の時間以降であるすべてのメッセージとペイロードを削除するクエリがあります。残念ながら、逆方向の外部キーのため、現在のクエリは次のようになります。
DELETE FROM messages WHERE creation_date < deletion_date;
DELETE FROM payloads WHERE id NOT IN (SELECT payload_id FROM messages);
2 番目の厄介な削除ステートメントが問題です。各テーブルに最大 5,000 万のレコードがある場合、1 時間以上かかるからです。
すべてのメッセージとペイロードを削除するより良い方法はありますか?
残念ながら、スキーマは私たちの管理外であることに注意してください...