exist和in

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版本,不同版本情况不一样

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容