今天整理数据库中的过期测试数据,由于表设有外键、级联、约束,有只删除部分数据,于是用DELETE命令,开始删除了10多条记录,速度都很快,但后来连4000多条记录都要等待老半天没反应,请高手指点指点。

解决方案 »

  1.   

    这4000多条是干什么慢?delete慢?还是其他?要删除的时候,看看select * from v$session_wait
      

  2.   

    修正一下:开始删除了10万多条记录,速度都很快,但后来连4000多条记录都要等待老半天没反应,用的都是delete命令
      

  3.   

    不会,我需要知道你的表总的数据量.delete时的where条件, 是否创建index.执行计划是啥?以及是否收集statistics
      

  4.   

    主表的总数据量是50多万 delete时候,where条件是一个子查询,有2万多条记录,要根据子查询中的2万多条记录,删除主表中符合要求的记录。
    主表创建有索引。
    没有收集statistics。
      

  5.   

    你的where条件怎么写的?应该是执行计划有问题,把整个语句贴出来吧
      

  6.   

    delete from BBB where uuid in(select id from AAA);但是之前删除也是用这么一句,删除9万多条记录,速度不到10秒钟。
      

  7.   

    我发现一个现象:一执行这条语句ORACLE 就产生一个用户类型锁!怎么才能安全的执行完这条语句啊?
      

  8.   

    dml都会产生行级锁.这个是正常的什么叫"安全的执行完?"
    没明白楼上的意思.
      

  9.   

    你的AAA数据量很大有无合理的索引?试试  delete from BBB where exists(select 1 from AAA where AAA.id = BBB.uuid)
      

  10.   

    explain plan for delete ....把你的执行计划调出来看下吧.