表table a,有一列为ID,ID的值为1,2,3,4,5,6,7。在表a中,每个ID对应的记录有30000条
执行下面的操作
delete from table a
where ID=1
执行时间月为1分钟
如果执行
delete from table a
执行时间为1小时,为什么差距这么大?

解决方案 »

  1.   

    1、回滚段占用
    2、日志记录两方面原因的,不是说你一个id删除1分钟,7个id删除就一定是7分钟的。打比方说,你只有一个垃圾桶(容量2L),你要删除7L的物品,1L一升的删除很快,但是7L一起删除你就需要及时清空垃圾桶,同时做好,恢复(rollback)的控制,速度自然就会慢些。
      

  2.   

    那我可以先获取每个section的ID,然后写个循环,每删除一个ID的内容,commit,这样的话是不是和我手动分别删除的速度应该一样?就是commit后,前面的回滚段还占用吗?
      

  3.   

    delete from table a
    where ID=1
    执行时间月为1分钟
    如果执行
    delete from table a
    执行时间为1小时,
    删除表中一条记录和删除整个表,如果记录相当的多的话,明显就能看出加入条件where id=1快的不只是一点点了,具体可以看一下执行的计划。
      

  4.   

    commit频率太高会导致事务的频率太高。
    你可以控制,比如每删除10000条记录后commit
      

  5.   

    这个很正常,删除指定ID的记录为30000条,而删除所有ID的记录的工作开销量是7倍,
    这时的开销主要是回滚段和日志信息的保存。
      

  6.   

    清空表就用truncate table tablename不写日志 速度快
      

  7.   

    当你想清空已经备份好的表时,一般用truncate table,你可以看看delete和truncate的不同!