数据结构里的平衡多叉树

要理解索引的原理 有个前提 就是要先理解平衡多叉树这种数据结构
平衡树的作用就是1.插入数据快(链表的优点)2.查找数据快(数组的优点)
也就是说 平衡树这种数据结构兼顾了链表和数组的优点
多叉就是有多个节点 应用场景是磁盘的文件系统

数据库里的索引

索引使用的是平衡多叉树这种数据结构。

查找数据的流程:
1.先查找叶子节点(即page页,包含了多个列值)
2.再查找行/记录



查找叶子节点(即page页)

什么是page页
在mysql innodb存储引擎里,page是最小操作单位,一个page包含了多个行/记录(默认是16KB大小)。


为什么要查找page
索引的叶子节点就是page。page包含了多个列值。我们最终要找的就是某一行记录的列值 所以我们先要找到叶子节点(即page)。


查找步骤
1.先查找非叶子节点
2.最终查找到叶子节点 即page


非叶子节点和叶子节点的区别
我们常说非叶子节点只存储索引 不存储数据 只有叶子节点才存储数据 具体是什么意思?
不管是非叶子节点还是叶子节点,都包含两个内容
1.数据
2.指针
指向其他节点(子节点 兄弟节点)的指针

而非叶子节点和叶子节点的区别在于 存放的数据的不同
1.非叶子节点
存放的也是数据 但是这个数据的作用只是用来索引 即用来查找数据 这个数据并不是我们最终要查找的数据。我们最终要查找的是列值 而列值是存放在叶子节点里(即page页)。
2.叶子节点
我们最终要查找的数据是建立了索引的列的每一行的列值 这个列值是存放在索引的叶子节点 但是每个叶子节点(即page页)包含了多个数据值(每个数据值就是建立了所有的列的某一行的列值)。page的作用是innodb存储引擎在实现索引时为了快速查找数据。


数据从哪里来
上面说了非叶子节点和叶子节点的数据的区别。那么数据是从哪里来?
1.非叶子节点
不同叶子节点的值的中间值
2.叶子节点
就是列值

查找行/记录

mysql把page读写到内存,然后使用二分查找算法查找到行/记录。到此为止,就已经找到了哪一行记录。

参考

姜承饶 《mysql技术内幕:innodb存储引擎》