次の表を検討してください。
Table: ORDER [Columns: ID (PK), Order_Num, etc...]
Child Tables: ORDER_ITEMS, ORDER_TRANSACTIONS, ORDER_PAYMENTS, ORDER_TRANSPORT, and many more etc.
すべての子テーブルには、ORDER テーブルの主キーを指す外部キーがあります。そして膨大な量のデータがあります。
さて、いくつかのオーダーをパージする必要があります。正しい順序でレコードを削除しますが、最初に子テーブル、次に注文テーブルを削除しますが、この特定のクエリを実行するには非常に長い時間 (15 分) かかります (単一の注文 ID の場合):
DELETE FROM ORDER WHERE ID='whatever'
DBA によると、これはおそらく子テーブルの依存関係 (FK チェック) が原因であり、子テーブルには巨大なレコード自体が含まれているため、時間がかかります (すべての依存関係は最終的に満たされますが、子レコードは事前に明示的に削除されるため)。
私のオプションは何ですか:
- メインの ORDER テーブルで DELETE を実行する前に、子テーブルで FK リレーションシップを無効にすることはできますか? どうすればこれを簡単に行うことができますか。
- Oracleに依存関係をチェックしないように指示する他の方法はありますか?
または他のアイデアはありますか?