尽量不要使用in、 not in来写sql,用EXISTS 、NOT EXISTS来替

94 阅读1分钟

为什么不用in、not in? 1.效率低 在项目中遇到这么个情况 a表有五十多万条,b表有六十多万条数据,数据没有多大 但是你的sql:
select a.*,b.name from a where a.id in (select a_id from b)
感觉应该很快就可以查询到数据结果好慢!
我查了一些mysql5.7以前,如果是小范围的查询,还是走索引的,a_id属于range,在随着数据量的增大时会自动进行全表的扫描(并且与要查询的结果是否包含在索引树中决定走index还是all);not in则不走索引;
目前在8.0以后验证,发现无论是in not 或者<>,都会走索引
在不能确定mysql版本情况下,还是使用exists比较好
2.容易出错后续不要修改(自己或者别人不能看出sql的问题)