2条很简单的查询sql //查询出不等于 张三 的所有用户
  select * from UserID a where 
  not exists (select * from UserName t where a.ID=t.ID and t.Name='张三')  select * from  UserID u  where u.ID 
  not in(select ID from  UserName t where t.Name='张三') 类似已上的情况 哪种查询性能会更优。
如果优的话,请说明原理! 
谢谢!

解决方案 »

  1.   

    通常的说法是内表较大时EXISTS快,外表较大时IN快。其实建好索引都差不多的。个人认为和子查询中返回的结果集数量也有关
      

  2.   

    为啥不能写成 exists 或者 in 呢,为啥一定要not呢,全表肯定效率低的。
      

  3.   

    exists是用loop的方式,循环的次数影响大,外表要记录数少,内表就无所谓了 in用的是hash join,所以内表如果小,整个查询的范围都会很小,如果内表很大,外表如果也很大就很慢了,这时候exists才真正的会快过in的方式。
      

  4.   

    如果都是not 的话,应该是not exists更爽吧。