目录
写在前面
网上看帖子的时候,经常会看到说尽量用exists,少用in。
那么问题来了,是所有场景下都尽量用exists吗,还是具体场景具体分析。
给你答案
mysql做子查询的时候,永远记得要小表驱动大表。
in
select * from A where id in (select id from B);
相当于先循环B,再循环A。B表驱动A表。
也就是当B表数据少于A表时,用in最佳。
exists
select * from A where exists (select 1 from B where B.id=A.id);
相当于先循环A,再循环B。A表驱动B表。
也就是当A表数据少于B表时,用exists最佳。
结论
其实in和exists都有其存在的必要性,虽然有时候用起来含义一样,但是其效率是不一样的,也不存在哪一个最好哪一个最差。
根据实际情况来判断使用哪种方式