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

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 查询,效率会高很多!
经验分享 程序员 微信小程序 职场和发展