索引失效的情况

  1. 如果索引列出现了隐式类型转换,则MySQL不会使用索引
    • 在where子句中字段类型是字符串,值是数值,如果没有加引号则MySQL不会使用索引
  2. where条件中含有or,除非or前面使用了索引列而or之后是非索引列,索引会失效(回表次数过多导致)
  3. MySQL不能在索引中执行like操作,这是底层存储引擎api的限制,最左匹配的like比较会转换为简单的比较,但是如果以通配符开头的like查询,存储引擎就无法比较。这种情况下MySQL只能提取数据行的值而不是索引值来比较
  4. 如果查询的列不是独立的,则MySQL不会使用索引。独立的列是指索引列不能是表达式的一部分,也不能是函数的参数
  5. 对于多个范围条件查询,MySQL无法使用第一个范围列后面的其他索引列,对于多个等值查询则没有这种限制
  6. 如果MySQL判断全表扫描比使用索引查询更快,则不会使用索引
  7. 索引文件具有B-Tree的最左前缀匹配特性,如果左边的值未确定,则无法使用该索引
    索引(a,b,c)没有a索引失效,其他没有,索引可以正常使用(MySQL5.6后优化的索引条件下推)
posted @ 2022-03-14 09:49  张三丰学Java  阅读(35)  评论(0编辑  收藏  举报