有两张表
1.第一张,数量百万级
id   number 主键
name varchar(50)
2.第二张,数量1万级
id number 主键
deletename varchar(50)
现在的问题是要写一个存储过程,删除第一张表中的name字段有在第二张表deletename中出现的记录,
怎么写性能最高啊,大家集思广义啊,小弟在此谢过了......

解决方案 »

  1.   

    delete a
    where exist
    (
    select 1
    from b
    where a.name=b.deletename)
      

  2.   

    select 1
    表示出来的结果无所谓的
    只有匹配值就返回
      

  3.   

    1.
    delete a 
    where exist 

    select 1 
    from b 
    where a.name=b.deletename )
    2.
    delete a 
    where a.name in  

    select b.deletename
    from b 
    )  
    这两个,哪个性能高点
      

  4.   

    这种数据量EXIST应该会快点
      

  5.   

    delete from a
    where a.name in
    (
    select deletename
    from a,b
    where a.name=b.deletename
    );
      

  6.   

    delete a 
    where exist 

    select 1 
    from b 
    where a.name=b.deletename ) 
    快些
      

  7.   

      在实际的项目应用中应该尽量避免使用 in 和 not in       推荐使用 exists 和 not exists 
      效率会高很多。
      

  8.   

    用in会对子查询里的表进行全表扫描
    exists只是验证存在性
    第二张表中的数据量大的时候,用exists比较快