现在两表,主表A以及子表B,现在要根据A表里面的ID删除子表B里面资料,子表B里面有639万条数据,删除的资料有1707条数据,子表B中已经建了A表ID的索引,执行语句为
delete from B WHERE B.A_ID =ID,现在删除要31s,在网上有查到说要用bulk来做,但这样的改动会比较大,因为以前是用程序来实现删除的,现在要放到数据库端用存储过程来实现,所以看一看各位大侠有没有知道为什么会删除这么慢,有没有地方可以进行设置

解决方案 »

  1.   

    如果不考虑恢复数据的话
    用truncate 快
      

  2.   

    为ID创建的索引中,只包含了一个ID字段吗?
    如果是的话,确认没有锁定
      

  3.   

    delete from B WHERE B.A_ID =ID,这句话一点问题也没有,不过要31s有点怪,不应该这么慢,看看执行计划,索引是否用上。
      

  4.   

    用索引表先存想要删除的ID,然后再用
    FORALL I IN 1..index_table_name.count
    delete from a where id=index_table_name(i);