索引是帮助MySQL高效获取的数据的 排好序 的 数据结构
B Tree 结构
- 叶子节点具有相同的深度,叶子节点的指针为空,
- 所有索引元素不重复,
- 叶子节点的数据从左往右递增排列
B+Tree 索引
- 非叶子节点不存储data,只存储索引,可以放更多索引
- 叶子节点包含所有的索引字段,
- 叶子之间使用指针链接(单向),提高区间访问性能
MySQL所使用的B+Tree索引,经过了改造,叶子节点之家使用双向指针链接。
默认一个节点大小为16kb
MyISAM 存储引擎
非聚集索引,索引文件和数据分离,叶子节点里面data,存储的是数据地址
InnoDb 存储引擎
主键索引属于聚集索引,叶子节点data里面包含了完整的数据记录
非主键索引属于非聚集索引,为了数据的一致性和节省存储空间,叶子节点data里面存储了主键ID
Hash 索引
根据查询key值,通过hash算法,以及hash表,直接可以定位到数据存储的地址,效率非常高,不受数据量影响
不支持模糊查询,不支持范围查询,不支持排序
联合索引结构
按照创建联合主键几个字段的顺序进行排序,组合保存在B+Tree的叶子节点