MySQL中索引

less than 1 minute read

Published:

索引的存储分类

  • B-Tree索引:最常见的索引类型,大部分引擎都支持B树索引,底层数据结构使用B+树
  • Hash索引:Memory、Heap引擎支持,使用场景简单。
  • R-Tree索引(空间索引):空间索引是MyISAM的一个特殊索引类型,主要用于地理空间数据类型,通常使用较少。
  • Full-Text(全文索引):全文索引也是MyISAM的一个特殊索引类型,支持char、varchar、text列,InnoDB从MySQL5.6版本开始提供对全文索引的支持。

设计索引的原则

  • 经常会被使用到的列优先
  • 选择性高的列优先
  • 合理建立索引,索引并不是越多越好
  • 尽量使用短索引
  • 更新十分频繁、数据区分度不高的字段上不宜建立索引
  • 建立索引的列,不允许为null
  • 单表索引建议控制在5个以内
  • 单索引字段数不允许超过5个

索引失效

Hash索引:

  • 只用于使用=或<=>操作符的等式比较,只适用于key-value查询
  • Hash索引不适用于范围查询,例如<、>、<=、>=这类操作

B-Tree索引:

  • 以%开头的LIKE查询不能利用B-Tree索引
  • 数据类型出现隐式转换的时候也不会使用索引,特别是当列类型是字符串,要将字符串用引号引起来索引才生效
  • 复合索引的情况下,假如查询条件不包含索引列最左边部分,即不满足最左原则,是不会使用复合索引的,右边可以没有,左边和中间不能缺
  • 如果MySQL估计使用索引比全表扫描更慢,则不使用索引
  • 用or分割开的条件,每一列都要有索引才能使用索引