我们在使用like 通配符有下面三种用法,其中第1和第2的用法会引起索引失效的问题。这是因为MySQL的索引是按照从左到右的顺序进行匹配的,而前导通配符(比如%abc)会导致无法按照索引顺序进行匹配。
1、like ‘%name’ ——> 失效
2、like ‘%name%’ ——> 失效
3、like ‘name%’
现在来说下解决方案:
1. 为需要进行模糊查询的name字段增加一个联合索引,比如name 和 age
2. Select 后面查询的字段必须要带上 name 和 age, 这样的查询就是覆盖索引查询
3.用关键字Explain, 可以看到我们的模糊查询sql是有用上索引的
覆盖索引定义:MySQL 执行计划 explain 结果里的 key 有使用索引,如果 select 后面查询的字段都可以从这个索引的树中获取,这种情况一般可以说是用到了覆盖索引,extra 里一般都有 using index;覆盖索引一般针对的是辅助索引,整个査询结果只通过辅助索引就能拿到结果,不需要通过辅助索引树找到主键,再通过主键去主键索引树里获取其它字段值。
1.覆盖索引是一种数据查询方式,不是索引类型
2.在索引数据结构中,通过索引值可以直接找到要查询字段的值,而不需要通过主键值回表查询,那么就叫覆盖索引
3.查询的字段被使用到的索引树全部覆盖到