MySql索引的储存分类
前言
`Mysql的索引是在存储引擎中实现,不同储存引擎的索引都不一定完全相同。
一、Mysql索引分类
BTree索引
- 最常见的索引类型,大部分引擎都支持B树索引
- innodbl采用B+树索引(mongodb采用B树索引),高度一般为3层,可以存储2千万左右的数据(按照数据页16k, 每条数据1k估算),通过3次磁盘IO可以获取数据,高度过高将导致过多的磁盘IO,性能降低,这也是mysql数据量的存储瓶颈的考虑。
- 实用于等值查询,范围查询,匹配左前缀,可以使用覆盖索引和前缀索引。
- MyISAM,InnoDB,Memory都支持
Hash索引
- 实用于key-value等值查询,不适用于范围查询
- 只有Memory引擎支持
RTree索引(空间索引)
- 主要用于地理空间数据类型,通常使用较少
- MyISAM的一个特殊索引类型
Full-Text索引(全文索引)
- 主要用于全文检索
- MyISAM支持该索引类型,InnoDB从Mysql5.6开始支持全文索引
二、索引失效场景
- 用or分割的条件,or前的条件中列有索引,而后面的没有索引
- 以%号开头的like查询
- 数据类型隐式转换
- 复合索引的情况下,不满足最左前缀
- MySQL估计使用索引比全表扫描更慢,则不使用索引
参考书记:
《深入浅出MySQL:数据库开发、优化与管理维护(第2版)》 作者:唐汉明 翟振兴 关宝军 王洪权 黄潇