效率的比较???

微信公众号 2012-12-06 05:18:53
语句一: 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,可发现每次执行后返回的耗时时间都不一样,是受到网络、本地缓存的影响了吗?如果是的话,那我该怎么做测试呢?)
...全文
186 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
微信公众号 2012-12-08
  • 打赏
  • 举报
回复
谢谢大家!单纯的看执行时间,是不行的。通过执行计划和IO读取以及各个表中的数据量来综合分析才是最好的。贴哥链接,是介绍怎样通过执行计划来优化SQL的:http://blog.csdn.net/jane_zhao/article/details/6156342
以学习为目的 2012-12-07
  • 打赏
  • 举报
回复
如楼上两位大神所言,然后查看执行计划吧
Walton_Yan 2012-12-07
  • 打赏
  • 举报
回复
 select top 20000  A.id  from A where not exists (select 1 from b where B.id=A.id) 
这个比较好
yiyishuitian 2012-12-07
  • 打赏
  • 举报
回复

你再试试这个

select top 2000 id from 
(
select id from A
except
select id from B
) as table
gogodiy 2012-12-07
  • 打赏
  • 举报
回复

select top 20000  A.id  from A where not exists (select 1 from b where B.id=A.id)
gogodiy 2012-12-07
  • 打赏
  • 举报
回复
一看执行计划; 二看IO读取; 如果相应的索引都建立好了,我会用这种写法:
fanzhouqi 2012-12-07
  • 打赏
  • 举报
回复
把执行计划发上来,效率和你表里面的数据大小相关。 空谈sql 性能好不好 是空话,不实际
水族杰纶 2012-12-06
  • 打赏
  • 举报
回复
SET STATISTICS IO ON
SET STATISTICS TIME ON
SET SHOWPLAN_TEXT ON
發糞塗牆 2012-12-06
  • 打赏
  • 举报
回复
先执行DBCC FREEPROCCACHE 然后两个放到同一个页面一起执行,记得先开启执行计划。看看各个所占的百分比

22,301

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧