MySQL索引背后的数据结构及算法原理

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;

你可能感兴趣的:(数据库,mysql,索引)