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

 我来答
Baby_原來
2015-06-23 · TA获得超过3402个赞
知道大有可为答主
回答量:1535
采纳率:94%
帮助的人:494万
展开全部

in 和exists


in是把外表和内表作hash 连接,而exists 是对外表作loop 循环,每次loop 循环再对内表进行查询。


一直以来认为exists 比in 效率高的说法是不准确的。如果查询的两个表大小相当,那么用in 和exists 差别不大。


如果两个表中一个较小,一个是大表,则子查询表大的用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 列的索引。

推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式