in和exists比较

Posted aimevous

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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 列的索引。

转载:https://www.cnblogs.com/weifeng123/p/9530758.html

以上是关于in和exists比较的主要内容,如果未能解决你的问题,请参考以下文章

mysql exists 和 in的效率比较

sql中exists和notexists用法总结(并和in的比较)

SQL Server-聚焦EXISTS AND IN性能分析(十六)

Oracle中 inexistsnot in,not exists的比较

SQL : IN 和 Exists 的区别

SQL中IN与EXISTS关键字