InnoDB在MySQL5.6版本后作为默认存储引擎,也是我们大部分场景要使用的,而InnoDB索引通过B+树实现,叫做B-tree索引。我们默认创建的
索引就是B-tree索引,所以理解B-tree索引的基本原理很重要,面试也是可能被问到的。
我们按照二叉查找树-->B树-->B+树-->B-tree索引-->页的顺序去了解
二叉查找树:
这里关于二分搜索树的原理就不做赘述了,可以参考:Java数据结构和算法(六)--二叉树
二分搜索树有个致命缺点就是数据如果是有序/倒叙插入的话,整棵树就变得极其不平衡,退化成链表,查找效率直接变成O(n)
B树:
B树是为了磁盘等存储设备的数据结构,用来存储数据的话,我们把数据比作键值对的形式key-value。如果对于数据库表中数据来说,key
就是主键,value就是一行中除主键其他列的数据
关于B树的详细特性请参考:从B树、B+树、B*树谈到R 树,这是大佬的文章
定义:
1、根节点至少包含两个孩子
2、每个节点最多包含m个孩子(m >= 2),m为树的深度
3、除了根节点和叶子节点,其他节点至少有ceil(m/2)个孩子,ceil函数为取上限ÿ