sql中in和exists的区别效率问题 转

 我来答
抄友灵70
推荐于2017-09-26 · TA获得超过183个赞
知道小有建树答主
回答量:441
采纳率:50%
帮助的人:188万
展开全部
in和exists
in 是把外表和内表作hash 连接,而exists是对外表作loop循环,每次loop循环再对内表进行查询。

如果两个表中一个较小,一个是大表,则子查询表大的用exists,子查询表小的用in:
例如:表A(小表),表B(大表)1:select * from A where cc in (select cc from B)
效率低,用到了A表上cc列的索引;select * from A where exists(select cc from B where cc=A.cc)
效率高,用到了B表上cc列的索引。
相反的2:select * from B where cc in (select cc from A)
效率高,用到了B表上cc列的索引;select * from B where exists(select cc from A where cc=B.cc)
效率低,用到了A表上cc列的索引。
not in 和not exists如果查询语句使用了not in 那么内外表都进行全表扫描,没有用到索引;而not extsts 的子查询依然能用到表上的索引。所以无论那个表大,用not exists都比not in要快。

in 与 =的区别
select name from student where name in ('zhang','wang','li','zhao');与
select name from student where name='zhang' or name='li' or
name='wang' or name='zhao'
的结果是相同的。

转的
http://zhidao.baidu.com/link?url=JYAd0XwcGuw_iczn2GEo-0dlXPx8VAJ5yioHevPcHMn47Gl-lx0XqDieefQWuvRgOMsiWOFcRZTqqjQ3RYcYpa
捐你妹8
2015-07-06 · TA获得超过638个赞
知道小有建树答主
回答量:351
采纳率:0%
帮助的人:368万
展开全部
效率上exists要高。
in的作用是对某一个或多个关键字做检索,检查是否在in后面的集合中。
而exists的作用是做判断,判断exists后的集合是否存在。
如果两个关键字后方的查询语句是一致的。那么对于exists来说,只要后面的选择语句到导致的结果集非空,那么语句就为真。但是对于in来说,它必须再检索是否有符合的集合才行。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
tjrmgs
2015-07-07 · TA获得超过5765个赞
知道大有可为答主
回答量:2161
采纳率:94%
帮助的人:1043万
展开全部
很多人和说法会认为in和Exists相比后者的效率要高。

但是以我本人使用数据库的经验来看,两者的运行效率其实不相伯仲,不管有无可被利用的索引,它们在运行速度上没有太明显的分别,硬要说哪个快一些的话exists可能会快一点点,但是这种区别通常可以忽略。

然而在求非交集时 not in和not exists运行效率上的差距就很大,碰到大数据表时not in不管有无可被利用的索引,都会导致效率悲剧,其运行速度极之糟糕往往要运行很长的时间才能返回结果,期间系统就像假死一样。not exists在有可被利用的索引的情况下碰到大数据表时其运行效率非常高、表现优异,但是若没有可被利用索引的情况下其运行效率也很不好,此时其运行速度尽管要比not in快上不少但还是属于那种令人无法接受的“蜗速”。

in和exists随各人喜好随便用,特别是数据量不大时。面对大数据表时就要小心,not in无论有无可被利用的索引都应避免使用,not exists在有可被利用索引的情况下可作为首选,反之也要避免使用。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友71fcdb1
2017-11-24
知道答主
回答量:1
采纳率:0%
帮助的人:931
展开全部
不要被别人误导了 要想知道真正结果 用plsql查看一下执行记录,你会有很多收获。用本人的亲身体会给你建议。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式