索引什么场景下会失效?

我觉得索引失效只有两种情况
● 一种是,无法使用索引,用不上索引
● 还有一种是,没必要走索引,直接全表扫描(Type = All),把主键索引的叶子节点全部走一遍的效率(全表扫描),比走二级索引,然后再回表的效率高。
● 比如说,范围查询占比太大,超过了全表的30%(这里并不准确),官网是这么说的: a scan was used based on whether the best index spanned more than 30% of the table, but a fixed percentage no longer determines the choice between using an index or a scan. The optimizer now is more complex and bases its estimate on additional factors such as table size, number of rows, and I/O block size.优化器就会放弃使用索引,选择进行全表扫描
任何查询走不走所谓的索引都是看成本,毕竟我们的目的就是尽可能快的查询数据。怎么快,怎么来。
具体有哪些索引失效的场景?
● like “%xx” "%xx%”,这种左模糊查询或者左右模糊查询,就可能导致索引失效,当然也可能走索引,比如正好可以使用索引覆盖
● a = x or b = y,or 前后只要有一个字段不是索引字段,就会导致索引失效,如果两个字段都是索引字段,那么会走索引,这种情况就是索引合并
● 对索引列进行计算,或者使用函数,那么也会导致索引失效。
● 这里提一下,MySQL在遇到字符串和数字的比较,会自动将字符串转换成数字,然后再进行比较
● 对索引列进行隐式类型转换,比如索引字段是varchar类型的,你查询的时候输入的字段参数是整数类型的话,这里就会对字段进行类型转换,导致索引失效。
● 使用联合索引的时候,不符合最左前缀原则,就可能导致索引失效,当然也可能走索引,比如正好可以使用索引覆盖
● null:is null、is not null ;索引本身不对null值的数据做处理。理论上不要让字段为null,处理方法:建表的时候,字段强制不为null、字段设置默认值。

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
索引在以下场景下可能失效: 1. 使用函数或表达式进行查询:如果在查询条件中使用了函数或表达式,例如`WHERE UPPER(column_name) = 'VALUE'`,索引可能无法起作用,因为函数或表达式的结果无法直接匹配索引中的值。 2. 对索引列进行类型转换:如果在查询条件中对索引列进行了类型转换,例如`WHERE CAST(column_name AS VARCHAR) = 'value'`,索引可能无法起作用,因为类型转换后的值无法直接匹配索引中的数据类型。 3. 使用模糊查询:当使用模糊查询操作符(如`LIKE`)进行搜索时,如果搜索模式以通配符开头(例如`LIKE '%value'`),则索引可能无法起作用,因为通配符开头的模式无法利用索引的有序性。 4. 列的基数太低:如果索引列的基数(不同值的数量)非常低,即使使用了索引,数据库优化器可能认为全表扫描更快,从而选择不使用索引。 5. 数据量过小:当表中的数据量非常小(例如只有几行)时,使用索引进行查询可能比全表扫描更慢,因为额外的索引查找开销可能抵消使用索引的好处。 6. 范围查询:对于一些范围查询(例如`BETWEEN`、`>、<`等),索引可能失效,因为范围查询需要扫描多个索引节点,而不是单个等值匹配。 7. 隐式类型转换:如果在查询条件中进行了隐式类型转换,例如将字符串与数字进行比较,索引可能无法起作用,因为隐式转换可能导致索引列的值与查询条件不匹配。 8. 复合索引中未使用第一个列:对于复合索引,如果查询条件没有使用到索引的第一个列,那么索引可能失效。 要确保索引的有效使用,需要根据具体的查询场景和数据特点来设计和优化索引

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一切随缘~~~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值