关于 in 和 exist 的理解

select * from A where exists(select * from B where B.id=A.id)  

这句相当于 

select * from A where id in (select id from B)  

对于表A的每一条数据,都执行select * from B where B.id=A.id的存在

性判断,如果表B中存在表A当前行相同的id,exists为真,该行显示,否则不显示 


区分inexists主要是造成了驱动顺序的改变(这是性能变化的关键),如果是exists,那么以外层表为驱动表,先被访问,如果是IN,那么先执行子查询


IN适合于外表大而内表小的情况EXISTS适合于外表小而内表大的情况

原文地址:https://www.cnblogs.com/leonkobe/p/3837050.html