关于 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 所以它通常在逻辑上删除,并且在可能时它会实时删除。
现在我们应该谈谈回滚,当您回滚插入时,您会从内存中清除行并清除重做日志。听起来很简单。当您回滚删除时(如果 Oracle 实时删除了行),它应该去重做日志,读取,然后将删除的行插入回数据库。
因此,如果我是正确且合乎逻辑的,回滚删除操作应该比回滚插入花费更多时间。
此外,如果您使用条件删除,删除过程应该比单独插入需要更多时间。
PS顺便谢谢你的问题,这很有趣,让我对Oracle内部进行了一些研究。