0


like模糊查询导致索引失效的解决方案

我们在使用like 通配符有下面三种用法,其中第1和第2的用法会引起索引失效的问题。这是因为MySQL的索引是按照从左到右的顺序进行匹配的,而前导通配符(比如%abc)会导致无法按照索引顺序进行匹配。

1、like '%name' ——> 失效

2、like '%name%' ——> 失效

3、like 'name%'

现在来说下解决方案:

  1. 为需要进行模糊查询的name字段增加一个联合索引,比如name 和 age

  1. Select 后面查询的字段必须要带上 name 和 age, 这样的查询就是覆盖索引查询

3.用关键字Explain, 可以看到我们的模糊查询sql是有用上索引的

覆盖索引定义:MySQL 执行计划 explain 结果里的 key 有使用索引,如果 select 后面查询的字段都可以从这个索引的树中获取,这种情况一般可以说是用到了覆盖索引,extra 里一般都有 using index;覆盖索引一般针对的是辅助索引,整个査询结果只通过辅助索引就能拿到结果,不需要通过辅助索引树找到主键,再通过主键去主键索引树里获取其它字段值。

1.覆盖索引是一种数据查询方式,不是索引类型
2.在索引数据结构中,通过索引值可以直接找到要查询字段的值,而不需要通过主键值回表查询,那么就叫覆盖索引
3.查询的字段被使用到的索引树全部覆盖到

标签: sql java

本文转载自: https://blog.csdn.net/aryyya/article/details/129968367
版权归原作者 唐程程 所有, 如有侵权,请联系我们删除。

“like模糊查询导致索引失效的解决方案”的评论:

还没有评论