A:select 字段 from a where id in (select id from b)
B:select 字段 from a where id exist (select id from b)
这两条SQL语句看上去差别不大,数据量一大了,效率的差距还是很明显的
两条SQL出现这个差距的主要原因还是执行顺序不同,A先执行子查询再执行主表查询,而B正好相反先查询主表再查询子查询。用小表来驱动大表,简单来说让先执行的表是小表就可以了
所以我们得到的结论就是 b是小表,a是大表可以用in;a是小表,b是大表可以用exist。需要注意的是如果遇到了not in和not exist的直接用not exist,因为not in不走索引,其实走不走索引也要看mysql版本,不同版本情况不一样