开发者社区> 问答> 正文

索引失效有哪些常见情况?

索引失效有哪些常见情况?

展开
收起
夹心789 2024-07-30 16:25:35 14 0
2 条回答
写回答
取消 提交回答
  • 索引失效的常见情况包括:

    OR查询左右有未命中索引的:如上述案例所示,OR连接的条件中如果有一个或多个条件未能命中索引,则整个查询可能无法利用索引。
    复合索引不满足最左匹配原则:如果查询条件没有按照复合索引的顺序进行匹配,则索引可能无法被有效利用。
    Like以%开头:当LIKE查询以%开头时,索引通常无法被使用,因为数据库无法确定搜索的起始点。
    需要类型转换:如果查询条件涉及类型转换,且索引列的类型与查询条件不匹配,则索引可能失效。
    where中索引列有运算:对索引列进行运算(如加减乘除)会导致索引失效。
    where中索引列使用了函数:在索引列上使用函数也会使索引失效,因为数据库无法直接通过索引来快速定位数据。
    如果MySQL觉得全表扫描更快时:在数据量较小或索引选择性不高的情况下,MySQL可能会选择全表扫描而不是使用索引。

    2024-07-30 19:33:09
    赞同 展开评论 打赏
  • 有挺多情况的,比如索引列上有计算
    explain select from user where id=1;
    执行结果
    image.png
    从图中可以看出,由于id字段是主键,该sql语句用到了主键索引。
    但如果id列上面有计算,比如:
    explain select
    from user where id+1=2;
    结果:image.png
    从上图中的执行结果,能够非常清楚的看出,该id字段的主键索引,在有计算的情况下失效了。

    类似的情况还有很多,比如下面这些

    image.png

    参考文档

    2024-07-30 18:49:28
    赞同 1 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载