mysql数据库in函数查询是否走索引

本文通过实例分析了MySQL数据库中IN查询的性能问题。当IN后面的参数数量较大时,查询可能不会走索引,导致效率降低。通过减少参数数量到一定程度,可以观察到显著的性能提升。此外,使用EXISTS替代IN查询在大数据量下能获得更好的效率。总结了IN查询的适用场景和优化策略。
摘要由CSDN通过智能技术生成

mysql数据库in函数查询是否走索引?

IN 通常是走索引的,当IN后面的数据在数据表中超过30%的匹配时是全表的扫描,不会走索引,因此IN走不走索引与后面的数据量有关系!

昨天恰好在工作中遇到了这个情况一个表有10万条数据,还有另外一个表有40万条数据,需要通过IN查询出对应的数据,整个完整过程的记录:

因为没有过滤掉无效的为零的数据所以查询的参数集合有数据2万条(2个表的任意一个都不足30%);
但实际是通过mybatis-plus分别查询两个表共耗时40~60秒不等;
通过过滤其中的为零的参数后,查询的参数的集合是16条,然后再通过mybatis-plus分别查询两个表共耗时100毫秒;

小结

  1. IN 查询的参数数量只有比较小的时候才会走索引; (具体多少后续查询验证)

  2. 使用 IN 查询的参数如果是固定时;SELECT * FROM 表名 WHERE ( 查询字段 = 固定参数1 OR 查询字段 = 固定参数2 ) 这样的效率是最高的;

  3. 如果查询的参数集合比较大时建议使用 EXISTS 代替 IN 查询,效率会高很多!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值