SQL中IN和EXISTS用法的区别

来源:互联网 发布:360卸载找不到软件 编辑:程序博客网 时间:2024/06/05 20:57

in和exists

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

如果查询的两个表大小相当,那么用in和exists差别不大;如果两个表中一个较小一个较大,则子查询表大的用exists,子查询表小的用in;


例如:表A(小表),表B(大表)

select * from A whre A.id in(select B.id from B)  效率低用到了A表上id列的索引;

select * from A where exists(select B.id from B where B.id = A.id)   效率高,用到了B表上id列的索引

in()只执行一次,它查出B表中的所有id字段并缓存起来。之后,检查A表的id是否与B表中的id相等,如果相等则将A表的记录加入结果集中,直到遍历完A表的所有记录。

exists()会执行A.length次,它并不缓存exists()结果集,因为exists()结果集的内容并不重要,重要的是其内查询语句的结果集空或者非空,空则返回false,非空则返回true。

原创粉丝点击