具体逻辑如下:A表中有300W数据 B表中有70W数据A表的字段有usercode username等等字段 B表中只有usercode字段现在要删除A表中的70W数据(删除条件是:参照B表中的70W数据来进行条件删除)
解决方案:
我写了一个这样的SQL语句:delete from A where usercode in (select usercode from B) 但删除A表中的70W数据 速度非常之慢 无法忍受还行大家帮忙看看 有什么样的SQL语句 可以速度快些~~谢谢!

解决方案 »

  1.   


    delete from A where exists select usercode from A,B
                                  where a.usercode = b.usercode 

      

  2.   


    delete from A where exists select usercode from A,B
                                  where a.usercode = b.usercode 

      

  3.   


    delete from A
     where exists  (select 1 from A, B where a.usercode = b.usercode)
    发重了,上面少括号 
      

  4.   

    我的数据库是Oracle的
    上面的语句 貌似不行呢~~
      

  5.   

    语句没有问题。删除大量数据是很慢,Oracle要做很多工作,要写UNDO,要写REDO,其中REDO的数据量是很大的,要把整条记录写到REDO LOG中。我有一个办法供楼主参考,可以建立一个临时表,把A表不删除的数据写入此表,TRUNCATEA表,把临时表的数据插入回到A表。仅供参考,我没有测试,所以请谨慎选择此方法。
      

  6.   

    7楼的对大数据量的解决方案正解。
    再提示一点的是,最后插回原表时,用insert into <原表> select * from <新创建表>
      

  7.   

    删一点就提交一次
    不要整个删完在提交
    commit
      

  8.   

    delete from table_name1 a where exists (select 1 from table_name2 b where  a.usercode = b.usercode)