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

本文探讨了MySQL中in函数如何影响索引的使用。通过三个实验情况,我们发现当in()内的数据量较大或者查询列是未加引号的char类型,以及存在子查询或函数时,索引可能不会被使用,导致全表扫描。理解这些情况对于优化SQL查询性能至关重要。了解索引的使用与失效条件,可以帮助我们更有效地设计和执行数据库查询。
摘要由CSDN通过智能技术生成

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

情况一

在这里插入图片描述

情况二

在这里插入图片描述

情况三

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

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

扩展知识点:

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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

DL_sword

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值