在MySQL中,使用in函数,会不会触发索引

在MySQL中,使用in函数,会不会触发索引,我们实践一下就知道了。
前提:Windows10、MySQL5.6.51、可视化工具navicat

情况一

在这里插入图片描述

情况二

在这里插入图片描述

情况三

在这里插入图片描述
对比以上三种情况,我们发现:一、二使用了索引,三没有走索引,而是全表扫描。
结论

  1. 当in()种的数据很大时,不走索引
  2. 当查询的列是char类型没有加引号,mysql优化器会自动给填充引号,同时也会导致索引失效
  3. 当in()中存在子查询、格式化函数等同样也会使索引失效!

扩展知识点:

type:连接类型,有以下几种值:
system:表只有一行记录,相当于系统表
const:通过索引一次就找到,只匹配一行数据
eq_ref: 唯一性索引扫描,对于每个索引键,表中只有一条记录与之匹配
ref:非唯一性索引扫描,返回匹配某个单独值的所有行用于=、<、> 操作符带索引的列
range:只检索给定范围的行,使用一个索引来选择行一般使用 between、<、>
index:只遍历索引树
ALL:全表扫描,性能最差

おすすめ

転載: blog.csdn.net/qq_28545605/article/details/120018026