请求高手给具体分析一下它们适应的情形,为什么有时候在换用它们的时候查出来的结果很不一样呢? 求高手解答下~~tk

解决方案 »

  1.   

    IN, NOT IN, EXISTS, NOT EXISTS的比较
    EXISTS只是检查行的存在性。
    IN检查值的存在性。
    EXISTS的效率要比IN高,因此要尽可以地使用EXITS而不是IN。
    当返回的结果集中包含NULL值时,NOT IN 返回FALSE, 而NOT EXISTS返回TRUE。技巧5:用NOT EXISTS替代NOT IN
    当NOT IN后面跟子查询,并且查询的结果集较多时,不宜用NOT IN;但如果NOT IN后面的括号内是列表,或子查询所满足的结果集很少时,也是可以用的。原因:在子查询中,NOT IN子句将执行一个内部的排序和合并,无论哪种情况下,NOT IN都是最低率的,因为它对子查询中的表执行了一个全表遍历。可以改写为外接连或使用NOT EXISTS。技巧6:关于IN和EXISTS,IN是把内表和外表做HASH连接,则EXISTS是对外表做LOOP循环,每次LOOP循环再对内表进行查询。
     如果内表和外表大小相当,则使用IN和EXISTS效率差不多少。
     如果子查询的表大,则使用EXISTS,如果子查询表小,则使用IN效率高。
      

  2.   

    我觉得LZ要先理解in 和 exists 的原理。才能知道如何调优。如果限制性强的条件在子查询,则使用in操作;如果限制性强的条件在主查询,则使用exists操作。