in 和 exists 区别
1.如果查询的两个表大小相当,那么用in和exists差别不大。
2.如果两个表中一个较小,一个是大表,则子查询表大的用exists,子查询表小的用in:
例如:表A(小表),表B(大表)
效率低,用到了A表上cc列的索引;
select * from A a where a.id in (select b.aId from B b)
效率高,用到了B表上cc列的索引。
select * from A a where exists(select a.aId from B b where b.aId=a.id)
相反的
效率高,用到了B表上cc列的索引;
select * from B b where b.aId in (select a.id from A a)
效率低,用到了A表上cc列的索引。
select * from B b where exists(select a.aId from A a where a.id=b.aId)