如果有两个表: users / userinfo
这两个表中的数据本来应该是一一对应的,但由于需要userinfo表中的数据被删除一部分,现在需要删除uses表存在但在userinfo表中已被删除的记录。delete from users where userid not in (select userid from userinfo);但每个表都有60万以上的记录,这条语句会执行N长时间,有没有更好的方法呢?

解决方案 »

  1.   

    我自己也想了一下,需不需要先left join一下,选出在那些不存在的userid,再用in操作,会不会快一点~
      

  2.   

    可以用外关联提高效率,如果你用的是9i的话,可以这样执行:DELETE FROM users
    WHERE userid IN(
    SELECT a.userid
      FROM users a
    LEFT OUTER JOIN userinfo b
      ON(a.userid=b.userid)
    WHERE b.userid IS NULL);
      

  3.   

    delete from users where not exist (select userinfo.userid from userinfo where userinfo.userid = users.userid );
      

  4.   

    勘误
    exist -〉exists
    写错了。
    上面的SQL可以试一下,理论上讲使用not exists比not in要快,而且有效的只是where部分,不会产生很大的试图