MySQL高级-4-索引优化

本文最后更新于:2020年8月9日 下午

mysql Ver 14.14 Distrib 5.5.62

4.1 如何避免索引失效

  1. 优先使用全值匹配。

  2. 最佳左前缀法则。

    如果索引了多列,要遵循最左前缀法则。意思是查询从索引的最左列开始并且不跳过索引中的列。

  3. 不在索引列上做任何操作(计算、函数、自动或手动的类型转换),会导致索引失效而转向全表扫描。

  4. 存储引擎不能使用索引中范围条件右边的列。

  5. 尽量使用覆盖索引(只访问索引的查询,也就是索引列和查询列一致),减少select *。

  6. MySQL在使用不等于(!=或< >)的时候无法使用索引,会导致进行全表扫描。

    (MySQL8+修复了该情况,会进行range级别的扫描)

  7. is null和is not null也无法使用索引。

    (MySQL7+修复了该情况,会用到索引)

  8. like以通配符开头(‘%abc’)MySQL索引会失效,将进行全表扫描。

  9. 字符串不加单引号索引会失效。

  10. 少用or,用它来连接时索引会失效。

4.2 一般性建议

  1. 对于单键索引,尽量选择针对当前query过滤性更好的索引。
  2. 在选择组合索引的时候,当前query中过滤性最好的字段在索引字段顺序中,位置越靠前越好。
  3. 在选择组合索引的时候,尽量选择可以能够包含当前query中的where子句中更多字段的索引。
  4. 尽可能通过分析统计信息和调整query的写法来达到选择合适索引的目的。

版权声明:自由转载-非商用-非衍生-保持署名 Creative Commons BY-NC-ND 3.0 协议,转载请注明出处!

 目录