当前位置:网站首页>MySql中的like和in走不走索引
MySql中的like和in走不走索引
2022-08-02 02:57:00 【emgexgb_sef】
今天我们来实际操作一下
首先我们创建一个用户表进行测试
Like
在email字段上加一个索引来测试Like关键字
我们先来复习一下Like语句的几种写法
往大的方向说Like语句由两种写法,分别时%和_。
%:用来匹配若干个字符的出现形式(也可以是0个)
_:用来匹配单个字符的出现形式
工作中我们主要的模糊查询也是%,我们重点来看一个Like的几种写法
select * from t_user where email like ‘你所知道的字符%’
select * from t_user where email like ‘%你所知道的字符’
select * from t_user where email like ‘%你所知道的字符%’
我们分别来看一下这三种走索引的情况
先来看第一种写法select * from t_user where email like ‘你所知道的字符%’
使用explain分析一下
很明显这条语句是走索引的。
这里有没有问题呢?我们把数据库中的数据做一下修改这行语句还会走索引吗?
我们将数据都修改为重复的,降低索引的区分度再试试。
再通过explain分析一下看结果
通过type列的ALL很明显看出这条语句已经不走索引了,因为此时数据库中email字段的区分度已经不支持123% 这种写法走索引了,所以使用的全表扫描。
接着来看第二种写法
select * from t_user where email like '%你所知道的字符'
先看测试数据
我们执行一下这行sql
SELECT * from t_user where email LIKE '%[email protected]'
大家可以停下来想一下会不会走索引,注意我写的sql和数据库的数据。这条sql查询的目标数据在数据库中的区分度是没问题的,而且email字段也是有索引的,按理说这条语句肯定会走索引的。
我们来看下explain的分析结果
从结果来看是不走索引的,其实这跟mysql的索引组织结构有关系。
%加在前面mysql是无法使用索引查询的,因为mysql不知道%代表多少字符,所以就只能走全表扫描了。
第三种写法其实跟第二种写法是一样的,也属于%在前面的一种,同样也不会走索引。
In
in走不走索引这个和条件后面的数据量有关系,当数据量较小的时候是会走索引的,而当in后面跟的数据量较大的时候就会走全表扫描。mysql底层对于后面的条件很可能做了数据重复处理;参考别人博客解释道条件范围占总数据的30%左右的时候会进行全表扫描,放弃执行索引的方式;里面可能还涉及到对后面的数据去重之后的结果占比的判定!
详细的大家可以看下这篇博客,讲的还是很详细的。
先自我介绍一下,小编13年上师交大毕业,曾经在小公司待过,去过华为OPPO等大厂,18年进入阿里,直到现在。深知大多数初中级java工程师,想要升技能,往往是需要自己摸索成长或是报班学习,但对于培训机构动则近万元的学费,着实压力不小。自己不成体系的自学效率很低又漫长,而且容易碰到天花板技术停止不前。因此我收集了一份《java开发全套学习资料》送给大家,初衷也很简单,就是希望帮助到想自学又不知道该从何学起的朋友,同时减轻大家的负担。添加下方名片,即可获取全套学习资料哦
边栏推荐
猜你喜欢
随机推荐
架构:应用架构的演进以及微服务架构的落地实践
直击程序员面试现场:百度面试官都问了我些啥?
feign调用不通问题,JSON parse error Illegal character ((CTRL-CHAR, code 31)) only regular white space (r
生成器知道鉴别器在无条件GANs中应该学习什么
给你一个大厂面试的机会,你能面试上吗?进来看看!
【LeetCode】94.二叉树的中序遍历
请教各位大佬,如果我代码里面设置了,这个id我在什么地方可以查到呢?连接到mysql cluste
MySQL8.0.26安装配置教程(windows 64位)
【LeetCode】144.二叉树的前序遍历
CentOS7安装Oracle数据库的全流程
* 比较版本号
How ReentrantLock works
AcWing 1053. Repair DNA problem solution (state machine DP, AC automata)
最大层内元素和
svm.SVC application practice 1--Breast cancer detection
Duplicate entry ‘XXX‘ for key ‘XXX.PRIMARY‘解决方案。
aws s3上传文件
OperatingSystemMXBean获取系统性能指标
Flask之路由(app.route)详解
Nacos源码分析专题(二)-服务注册









