0

Oracle データベースに、1 対 1 の親子関係を持つテーブルのペアがあります。残念ながら、外部キーは子ではなく親で定義されています。

-----------------        -----------------        
| messages      |        | payloads      |
-----------------        -----------------
| id            |        | id            |
| payload_id    |------->| content       |
| creation_date |        -----------------
-----------------

messages.payload_idfrom 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 時間以上かかるからです。

すべてのメッセージとペイロードを削除するより良い方法はありますか?

残念ながら、スキーマは私たちの管理外であることに注意してください...

4

2 に答える 2