mysql-索引失效场景

失效场景:

  1. 全表查询的情况会造成索引失效
  2. 范围查询右边的列,计算式有索引也不能使用索引查询。
  3. 负责索引,不满足最左前缀法则。
  4. where条件中,索引字段使用函数
  5. 如果是字符串类型的索引字段,不加单引号,造成索引失效。
  6. 索引字段和where条件字段类型不相等,也会造成索引失效。
  7. 两个不同的索引字段使用or进行连接,就会造成全表扫描。
  8. 使用like如果前面加%和前后面都加%,不做索引
  9. 如果某个索引的字段,该字段大部分内容都是一个值,此时,全表扫描就会比索引更快,当查询这一个值的话就会走全表扫描;
  10. 如果索引字段绝大部分都是null,is null查询条件就会走全表扫描。
  11. not in 索引失效。

索引用到不足的情况:

如果是查询多个单列索引字段,只会用一个最优的索引字段(辨识度最高),如果是复合索引的情况,满足最左前缀法则,就会是多个索引字段检索。

避免方式:

  1. 尽量不使用模糊查询,使用全值匹配。
  2. 最左前缀法则: 使用复合索引,必须按照创建索引的顺序从最左边的列, 连着查询,中间不能有空余字段, 像爬楼梯一样,从1层想直接上3层是不行的,必须要走2层, 但是where条件的顺序没有关系,只是where条件必须包含。
  3. 范围查询右边的列,不能使用索引查询。
  4. 保证索引字段和检索条件类型的相等。
  5. 尽量不使用select * ,尽量使用查询需要的字段。
  6. 如果光用到了索引字段来显示数据,那就只使用索引字段,这就叫覆盖索引 因为,根据索引查询,第一次是先去索引结构的记录里面查询数据,再通过查询的数据回表查询, 如果是只用到了索引字段,那就只需要在索引里面查出数据就可以了。
  7. like使用的索引字段时,尽量后面加% 如果like前后必须都加%。
  8. 使用索引当中的列作为返回结果,也叫覆盖索引。
  9. 检索条件尽量使用搜索引擎相关的框架来实现。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值