当前位置: 首页 > 图灵资讯 > java面试题> 金三银四精选java面试题-有哪些情况会导致索引失效?

金三银四精选java面试题-有哪些情况会导致索引失效?

来源:图灵教育
时间:2024-01-08 13:13:31
 

有哪些情况会导致索引失效?

 

这个问题要分版本回答!!!版本不同可能会导致索引失效的场景也不同,直接给答案的都是耍流氓!!!

 

这里回答基于最新MySQL8版本,MySQL8失效的以前版本也失效,MySQL8不失效的,以前可能会失效。

 

  • 使用like并且是左边带%, 右边可以带会走索引(但是并不绝对,详细解释看下面like专题分析)
  • 隐式类型转换,索引字段与条件或关联字段的类型不一致。(比如你的字段是int,你用字符串方式去查询会导致索引失效)。
  • where条件里面对索引列使用运算或者使用函数。
  • 使用OR且存在非索引列
  • where条件中两列做比较会导致索引失效
  • 使用IN可能不会走索引(MySQL环境变量eq_range_index_dive_limit的值对IN语法有很大影响,该参数表示使用索引情况下IN中参数的最大数量。MySQL 5.7.3以及之前的版本中,eq_range_index_dive_limit的默认值为10,之后的版本默认值为200。我们拿MySQL8.0.19举例,eq_range_index_dive_limit=200表示当IN (...)中的值 >200个时,该查询一定不会走索引。<=200则可能用到索引。)
  • 使用非主键范围条件查询时,部分情况索引失效
  • 使用order by可能会导致索引失效
  • is null is not null 可能会导致索引失效