MySQL中索引
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分割开的条件,每一列都要有索引才能使用索引