前几天发现IN的语句很慢。
MYSQL全表大概6W条。用了很多in语句。
一个SQL,走了大概20S还没有走完。
然后在网上进行核实,然后网上的说法:
部分mysql低版本不支持IN走索引,但是高版本支持。
当IN的数据超过一个设定值,不走索引。
鬼知道你们是怎么个设定。
用ORACLE有这么几个确认无误:
我有一个表里面有超过200亿条数据,使用in查询最多也不超过2S。按照逻辑绝对走索引了。(不走索引200亿条数据2S出,那是真的NB了)
形如
select * from T1 where a in (1);
select * from T1
join T2 on T1.a = T2.a
weehre a in (1);
确认无误可以走索引。
(我天天在200亿的数据里面用这个SQL)
IN中有不超过200个数据的情况下肯定走索引。
in在ORACLE肯定走in之前那个表的索引。
当同时有不同类型的数据的时候可能有不走索引的情况
(一个是查出来的,一个是文本,不走索引)
select * from T1 where a in (select a from T2) or a in (1);
这种情况下通常UNION (反正我是这么做的)简化逻辑。
mysql的版本5.7,join的性能肯定比in强。
IN概率不走索引,原因多种多样。
没仔细核实,但是左表数据大,in中的数据构成复杂基本上不走索引。
in数据大不走索引。
建议join。