分析in和exists的区别与执行效率的问题 (2)
(3)当只显示两个表的数据时,使用IN,EXISTS都不合适,要使用连接:
select * from A left join B on id = A.id |
所以使用何种方式,要根据要求来定。
这是一般情况下做的测试:
测试结果:
set statistics io on select * from sysobjects where exists (select 1 from syscolumns where id=syscolumns.id) select * from sysobjects where id in (select id from syscolumns ) set statistics io off (47 行受影响) |
表 'syscolpars '。扫描计数 1,逻辑读取 3 次,物理读取 0 次,预读 2 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。
表 'sysschobjs '。扫描计数 1,逻辑读取 3 次,物理读取 0 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。
(1 行受影响)
(44 行受影响)
表 'syscolpars '。扫描计数 47,逻辑读取 97 次,物理读取 0 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。
表 'sysschobjs '。扫描计数 1,逻辑读取 3 次,物理读取 0 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。
(1 行受影响)
set statistics io on select * from syscolumns where exists (select 1 from sysobjects where id=syscolumns.id) select * from syscolumns where id in (select id from sysobjects ) set statistics io off |
(419 行受影响)
表 'syscolpars '。扫描计数 1,逻辑读取 10 次,物理读取 0 次,预读 15 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。
表 'sysschobjs '。扫描计数 1,逻辑读取 3 次,物理读取 0 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。
(1 行受影响)
(419 行受影响)
表 'syscolpars '。扫描计数 1,逻辑读取 10 次,物理读取 0 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。
表 'sysschobjs '。扫描计数 1,逻辑读取 3 次,物理读取 0 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。
(1 行受影响)
测试结果(总体来讲exists比in的效率高):
效率:条件因素的索引是非常关键的
把syscolumns 作为条件:syscolumns 数据大于sysobjects
用in
扫描计数 47,逻辑读取 97 次,
用exists
扫描计数 1,逻辑读取 3 次
把sysobjects作为条件:sysobjects的数据少于syscolumns
exists比in多预读 15 次
0
收藏
推荐专栏更多
猜你喜欢
我的友情链接
js闭包的研究
Java线程:线程的调度-休眠
我们不得不面对的中年职场危机
职场终极密籍--记我的职业生涯
用光影魔术手制作一寸照片(8张一寸)
我的IT职场生涯: 毕业4年,月薪过万
Linux关闭休眠和屏保模式
年薪从0到10万-我的IT职场经验总结
Windows7删除休眠文件hiberfil.sys节省大量C盘空间
致IT同仁 — IT人士常犯的17个职场错误
“跳槽加薪”现象,无奈的职场规则
PostgreSQL的B-tree索引
PostgreSQL pg_rewind实例--could not find previous WA
redis geo 地理位置系应用战案例
PostgreSQL逻辑备份pg_dump使用及其原理解析
PostgreSQL如何删除不使用的xlog文件
PostgreSQL pg_ctl start超时分析
Greenplum -- segment 死机后恢复
postgresql 主备及切换-恢复方案
扫一扫,领取大礼包
转载于:https://blog.51cto.com/77857/157748
Ctrl+Enter 发布
发布
取消