mysql 模糊查询 like 使用索引状况分析

前言:

mysql 创建索引大部分是为了快速查询,但有时候会发现查询语句并没有大多提升,这里面终究是有些故事的。

1.模糊查询 like 引用索引分析

先直接给个结论,然后我们再分析

select * from table where name like 'jonny%';
select * from table where name like '%jonny%';

如果 name 字段加了索引,第一条查询是会使用到索引的,第二条不会,具体原因不深究,我们可以用 mysql 的 explain 命令分析一下。

explain select * from table where name like 'jonny%';

查询结果输出字段如下:

id:选择标识符
select_type:表示查询的类型。
table:输出结果集的表
partitions:匹配的分区
type:表示表的连接类型
possible_keys:表示查询时,可能使用的索引
key:表示实际使用的索引
key_len:索引字段的长度
ref:列与索引的比较
rows:扫描出的行数(估算的行数)
filtered:按表条件过滤的行百分比
Extra:执行情况的描述和说明

主要看 key 字段,其表示实际用到的索引,推荐建个表试一下,实操比博客更有说服力。

2.有人好奇正则匹配会用到索引吗?这里说一下,根据我的测试,不会!
3.特殊情况

凡事都要考虑特殊情况的吧,针对上述1和2的论断,有特殊情况

如果被查询字段和模糊查询条件一致的话,模糊查询无论是前缀匹配、后缀匹配、两端匹配、正则匹配,都会用到索引。
eg:

select name  from table where name like '%jonny%';
select name  from table where name regexp 'jonny';

上述2个例子中,查询条件只针对 name,被查询的字段也只是 name,那么查询会用到索引。当然还有多个字段的情况,各种组合下情况会有所不同,这里不具体分析。

3.参考文档

MySQL Explain详解

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值