前言
我们都知道MySql索引效率很高!那其中的原理是什么呢?先跑出个问题来:二叉树、红黑树(二叉平衡树)、BTree(平衡多叉树)、B+tree这几种类型中哪一种是mysql索引所选择的呢?
这个问题好多同学回答不出来,回去百度,结果也不是太明白吧!
这里我告诉大家,mysql所选的是B+tree,那B+tree又是什么呢?
B+tree优点
B+树:其实他是Btree的变种,是在他的基础上做了优化,
优点:
1、IO次数更少
2、范围查询简便
3、查询性能稳定
特征:
- 有K个子树的中间结点包含有k个元素(B树中有k-1个元素),每个元素只保存索引,而不保存数据,所有数据都保存在了叶子节点(k指的是每个节点的关键字个数,另外还有一个m指的是这棵树的高度)
- 所有数据都存放在了我们叶子节点上面,以及指向包含这些元素记录的指针(双向循环列表),并且我们的叶子节点是从小到大的顺序排列的,这样便于我们查找和排序。
- 所有的子节点都保存着中间节点元素
InnoDB存储引擎
InnoDB中的主键索引其实就是聚集索引,当然所有的数据都存在了主键索引位于的聚集索引B+Tree结构的叶子节点之中。这就是为什么我们在设计主键的时候要求我们的铸剑师有序原因了。假如我们的大小随机,那每次进来叶子节点的位置随机的,这样就会出现我们的页分裂,从而导致性能下降!
如果我们按照有序来处理,则每次都是按照顺序一排一排的进行排列,这样能够完美的比来了我们的页分裂。
好的,今天就先讲到这里,欢迎大家留言讨论
欢迎大家关注我的工种昊 《coder练习生》