语句一: select top 20000  A.id  from A where A.id not in (select B.id from B)语句二: select  top 20000  A.id   from A
left join B on  B.id = A.id and B.id is null
其中,A表中数据有1551118条,B表中有数据12399条。
我想请问一下:哪一条语句的执行效率更高呢?(ps:我自己也做了下测试,测试环境:win7 64位 sql server 2008,可发现每次执行后返回的耗时时间都不一样,是受到网络、本地缓存的影响了吗?如果是的话,那我该怎么做测试呢?)

解决方案 »

  1.   

    先执行DBCC FREEPROCCACHE
    然后两个放到同一个页面一起执行,记得先开启执行计划。看看各个所占的百分比
      

  2.   

    SET STATISTICS IO ON
    SET STATISTICS TIME ON
    SET SHOWPLAN_TEXT ON
      

  3.   

    把执行计划发上来,效率和你表里面的数据大小相关。
    空谈sql 性能好不好 是空话,不实际
      

  4.   


    select top 20000  A.id  from A where not exists (select 1 from b where B.id=A.id)
      

  5.   


    你再试试这个select top 2000 id from 
    (
    select id from A
    except
    select id from B
    ) as table
      

  6.   

     select top 20000  A.id  from A where not exists (select 1 from b where B.id=A.id) 这个比较好
      

  7.   

    谢谢大家!单纯的看执行时间,是不行的。通过执行计划和IO读取以及各个表中的数据量来综合分析才是最好的。贴哥链接,是介绍怎样通过执行计划来优化SQL的:http://blog.csdn.net/jane_zhao/article/details/6156342