Mysql in和exists的区别
相同点
in和exists都是用于范围查找
1 | SELECT * from t_user AS 外表 WHERE EXISTS (select b.user_id FROM t_user_org 内表 WHERE a.user_id =b.user_id); |
不同点
- in是把外表和内表做hash链接,先查询内表(b表)返回数据列,在将返回的数据列给外表(a表)做比较,无论子表是否有数据都对子查询进行全部匹配
- exists是对外表做loop循环,循环后在对内表进行查询,将外表查询的接口放到exists中做条件验证,根据验证结果true和false来过滤数据,如果有一个存在则返回外表所有数据
外表查询结果集大的用in,内表查询结果集大的用exstis
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 ting-个人博客!