覆盖索引解决like ‘%ab’索引失效

我们在使用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.查询的字段被使用到的索引树全部覆盖到
————————————————

原文链接:https://blog.csdn.net/aryyya/article/details/129968367

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
当 SQL 中使用 LIKE 操作符进行模糊匹配时,如果没有正确使用索引,可能会导致索引失效,从而影响查询性能。以下是一些可能导致 LIKE 索引失效的情况: 1. 前导通配符:如果 LIKE 表达式以通配符 '%' 开头,索引将无法有效利用。例如,"WHERE column LIKE '%abc'",这种情况下索引将无法生效。 2. 不适当的通配符位置:如果 LIKE 表达式中的通配符位于开头和结尾之间,而不是结尾之后,索引的效果可能会减弱。例如,"WHERE column LIKE 'abc%def'",索引可能无法完全匹配。 3. 多个通配符:如果 LIKE 表达式中包含多个通配符,如 '%' 或 '_',索引可能无法生效。例如,"WHERE column LIKE '%abc%def%'",这种情况下索引可能无法使用。 4. 字符集问题:如果列的字符集与 LIKE 表达式中的字符集不匹配,索引可能无法使用。确保字符集一致可以提高索引的效果。 5. 数据类型问题:如果列的数据类型与 LIKE 表达式中的数据类型不匹配,索引可能无法使用。确保数据类型一致可以提高索引的效果。 为了让 LIKE 操作符在查询中有效利用索引,可以考虑以下方法: - 尽量避免在 LIKE 表达式的开头使用通配符。 - 使用索引友好的通配符位置,将通配符放在结尾之后。 - 避免使用多个通配符。 - 确保字符集和数据类型一致。 如果以上方法无法解决问题,可以考虑其他技术手段,如全文搜索引擎或者使用其他类型的索引(如全文索引),以满足模糊查询的需求。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值