1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > MySQL中like查询是否会使用索引

MySQL中like查询是否会使用索引

时间:2021-04-23 02:14:35

相关推荐

MySQL中like查询是否会使用索引

MySQL中like查询使用索引

explain查看执行计划实验过程Like 不走索引的优化

explain查看执行计划

首先介绍一下mysql explain的各项内容:

实验过程

先建立一个表,如下图所示

在loacation_path添加索引后进行单条件,全部数据的查询 like xxx%查询

explain select * from location where loaction_path like '中国%’

查询结果

可以看出ID为1 没什么好说的,然后是simple的查询,用到的表为location,分区为null,连接的类型是range(因为是用like查询的),possible_keys为可以使用的location_path列上的索引,最终使用的也是这个key,key_length = 1020,这个是怎么算的呢?

先看下表的列的类型和字符集:

Location_path这一列是char(255),uft8mb4_0900_ai_ci正好对于每个字符用4个字节存储:4*255 = 1020; 如果loation_path 允许为null,则还需要多一个字节存储null,key_length会为1021,使用了索引进行查询,扫描行数为6行,使用了索引。

like %xxx查询

explain select * from location where loaction_path like '%/浦东新区’

这个则没有使用索引

like %xxx%查询

explain select * from location where loaction_path like '%/上海市/%’

这个也没有使用索引查询

分析

如果前缀为%,索引不知道应该如何匹配,所以不会用到

进行单条件,查询单个属性的查询

explain select loaction_path from location where loaction_path like '%上海市%’

发现使用了索引,但是过滤的行数还是7行,possible_keys为空,也就是估计没用索引,但是实际查询时候发现是覆盖索引的查询,所以用上了。

Like 不走索引的优化

使用LOCATE

SELECT * FROM location WHERE LOCATE('上海市', location_path);

benchmark对比如下:看起来查不了多少,基本上一样(也可能和数据量有关系,毕竟表里面就几条数据)

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。