以构建二叉搜索树的形式作为索引,然后查找。
查找的时候就是左小右大的形式去找,时间复杂度:log2n。
只是上面的只是举例子实际是B+树。
Mysql的体系结构:
大多数的:
索引结构:
如果采用二叉树和红黑树:
都有缺点,不如B-Tree。
B Tree
树的度数指的是一个节点的子节点的个数。
key代表键值。key - value和对象差不多
object = {key:value},LHG = {age:30}.
LHG.age = 30.
4个key,小于20的指针就指向下面的一个枝叶节点。
所以指针会 = count(key)+ 1;10 15 18都是小于20的
23,25,28都是在20和30之间的。类比即可,就这么查询。key下面对应的实体数据。
可视化插入数据 in B - tree:
B-Tree Visualization (usfca.edu)
当插入了5个key的时候,因为5阶的B-Tree只有4个key,5个指针,所以:
会发生split(裂变)
每次都是中间元素往上走,中间元素就是这组数字的中位数,0023和0234都小于345,899和1200都大于345.
关键的来了:**当中间元素组成的超过5阶(4个key,5个指针)会发生什么**
逻辑是一样的,递归:
还是中间元素不断的被挑选。
计算机真的是人类智慧的结晶
B+ tree结构
终于讲到B+Tree了:
这里面的这个数据是只存放在叶子节点的。上面的非叶子节点主要是**起到索引的作用。**
同时这些存放数据的叶子节点形成了一颗单向链表:
插入的中间元素都会出现在叶子节点。
以下是经典的B+Tree
Mysql的B+Tree是双向链表,一图胜千言。
每一个节点都是存储在数据块/页中的。一个数据页在innodb中默认是16kb