Oracle RDBMS に関して、どちらのロールバックが高速ですか?
Rollback1 : 1000000 レコードを挿入してからロールバックする
また
Rollback2 : 1000000 レコードを削除してからロールバックする
これを使用して、クエリの完了率を確認できます。
SELECT SESSION_ID, percent_complete, estimated_completion_time
FROM SYS.DM_EXEC_REUQESTS
この質問に答えるには、Oracle が挿入および削除操作を内部で処理する方法を知っておく必要があります。何かを挿入すると、メモリに挿入され、次にコミットするときに挿入されることを私は知っています。Oracle はディスクに書き込みます。
削除操作については、これを見つけました:http://www.dba-oracle.com/t_oracle_soft_logical_deletes.htm したがって、通常は論理的に削除し、可能な場合はリアルタイムで削除します。
ここで、ロールバックについて説明する必要があります。挿入をロールバックすると、メモリから行がクリアされ、REDO ログがクリアされます。シンプルに聞こえます。削除をロールバックすると (Oracle が行をリアルタイムで削除した場合)、REDO ログに移動し、読み取り、削除された行をデータベースに挿入する必要があります。
したがって、私が正しく論理的であれば、削除操作のロールバックは、挿入のロールバックよりも時間がかかるはずです。
また、条件付きで削除している場合、削除プロセスは挿入自体よりも時間がかかります。
PSちなみに、質問をありがとう、それは興味深いものであり、Oracleの内部についていくつかの調査を行うようになりました.