日期:2014-05-17  浏览次数:20419 次

效率的比较???
语句一: 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,可发现每次执行后返回的耗时时间都不一样,是受到网络、本地缓存的影响了吗?如果是的话,那我该怎么做测试呢?)

------最佳解决方案--------------------
SET STATISTICS IO ON
SET STATISTICS TIME ON
SET SHOWPLAN_TEXT ON

------其他解决方案--------------------
一看执行计划;
二看IO读取;
如果相应的索引都建立好了,我会用这种写法:
------其他解决方案--------------------
先执行DBCC FREEPROCCACHE
然后两个放到同一个页面一起执行,记得先开启执行计划。看看各个所占的百分比
------其他解决方案--------------------
如楼上两位大神所言,然后查看执行计划吧
------其他解决方案--------------------
把执行计划发上来,效率和你表里面的数据大小相关。
空谈sql 性能好不好 是空话,不实际
------其他解决方案--------------------

你再试试这个

select top 2000 id from 
(
select id from A
except
select id from B
) as table

------其他解决方案--------------------
 select top 20000  A.id  from A where not exists (select 1 from b where B.id=A.id) 
这个比较好
------其他解决方案--------------------

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

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