1、索引的本质
索引:数据结构
查询算法(顺序查找、二分查找、二叉查找树等),不同的查询算法适用于不同的数据结构;
2、b tree和b+tree
B+树内节点不存储数据,所有 data 存储在叶节点导致查询时间复杂度固定为 log n。
B-树查询时间复杂度不固定,与 key 在树中的位置有关,最好为O(1)
3、为什么使用b tree和b+tree作为索引
B-/+Tree作为索引的理论基础;
索引文件存储在内存和磁盘上==》索引的结构组织要尽量减少查找过程中磁盘I/O的存取次数;
主存存取原理;
磁盘存取原理;
局部性原理和磁盘预读;
4、mysql索引性能分析
不同存储引擎对索引的实现方式是不同的;
MyISAM存储引擎:
- B+Tree作为索引结构;
- 非聚集索引
- 索引文件和数据文件是分离
- 主索引和辅助索引(Secondary key)在结构上没有任何区别
- 索引文件中的叶节点的data域存放的是数据记录的地址
InnoDB存储引擎:
- B+Tree作为索引结构
- InnoDB的数据文件本身就是索引文件
- 主索引文件中的叶节点data域保存了完整的数据记录
- 辅助索引data域存储相应记录主键的值而不是地址
mongodb使用b tree;