前言
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,那么查询会用到索引。当然还有多个字段的情况,各种组合下情况会有所不同,这里不具体分析。
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。
发表评论