什么情况下索引会失效?即查询不走索引?

在一些特定的情况下,即使表上存在索引,索引也可能不生效,不能被查询优化器使用。以下是一些常见的情况:

  1. 使用!=或<>操作符:索引对期待扫描全部数据的查询通常没有帮助,尤其是不等式查询。
  2. 对索引列进行计算或函数操作:如果对一个索引列进行函数操作,那么引擎将无法使用索引,因为它必须对每个行执行函数操作后才能比较结果。例如:SELECT * FROM table WHERE YEAR(date_column) = 2022;
  3. 使用LIKE操作符以%开头的模糊查询:当LIKE的模式值以通配符%开头时,无法使用索引,因为查询引擎无法知道搜索结果在何处开始或结束。例如:SELECT * FROM table WHERE column LIKE '%Z';
  4. 联合索引中使用最左前缀原则。像 (col1, col2, col3) 这样的联合索引只有在查询条件在索引树左侧时才能够被用到。比如查询 col1col1, col2,索引是起效的。但当查询 col2 或者 col3 或者 col2, col3这样,该索引就不起作用了。
  5. 数据类型不一致:如果查询中的数据类型与索引中的数据类型不一致,MySQL将无法使用索引。

发表评论

后才能评论