MYSQL IN语句的速度慢和解决

前几天发现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。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值