Mysql与索引有关的树的概念

Posted 猴子特种兵

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Mysql与索引有关的树的概念相关的知识,希望对你有一定的参考价值。

1.简单地认识下与索引有关的数据结构: 
树的简单概念:由n个节点组成具有层次关系的集合,根朝上叶朝下 
树的特点:每个节点有0或多个子节点,无父节点称为根节点,每个非根节点有且只有一个父节点,每个节点可分为多个不相交的子树(父节点除外) 

二叉树的简单概念:每个节点最多有2个子树的树结构,有左右子树之分 

二叉查找树的简单概念:二叉树的前提下,左子树上所有节点的值均小于/等于其父节点的值,右子树上所有几点的值均大于/等于其父节点的值,左右子树也分别为二叉查找树 
二叉查找树的查找步骤:小于往左,大于往右,相等则查找成功,子树为空不成功 

但是,二叉查找树遇到以下的情况效率会很低 

存在某一节点高度过高

就有了*衡二叉树的存在
二叉*衡树的简单概念:在二叉查找树的前提下,任何节点的两棵子树的高度最大差为1(|BF|<=1) 
*衡因子(BF):BF=左子树深度—右子树深度 
要维持二叉*衡树的*衡,最为重要的是找到其最小不*衡树,最小不*衡树可以这样来找:找距离插入节点最*且*衡因子的绝对值大于1的结点为根的子树,找到最小不*衡树之后呢,需要将其变为*衡,主要是依靠旋转来实现的 
如何维持*衡(3种最小不*衡树,3种旋转方式): 
a.左旋:BF< -1时,父节点变为该节点的左节点 
b.右旋:BF> 1时,父节点变为该节点的右节点 
c.左旋+右旋 or 右旋+左旋:插入节点后,最小不*衡树的BF与它的子树的BF符号相反时,依具体情况先旋转一次使符号相同后,再反向旋转一次 

但是,二叉树每一个节点最多也就对应2个子节点,节点一多的话树的高度就会很大,查找起来要遍历的层数会很多,效率还是个问题,于是,B+树便应运而生了 。

B+树的简单概念:一种特殊的*衡查找树,所有记录节点都是按键值大小顺序存放于同一层的叶子节点,各叶子节点以指针进行衔接,键值小在左,键值大在右 。

叶子节点从左到右顺序遍历便可得到所有键值的顺序排序,这也是为什么联合索引需满足“最左前缀匹配”的原因。

 

以上是关于Mysql与索引有关的树的概念的主要内容,如果未能解决你的问题,请参考以下文章

读书笔记-MySQL运维内参08-索引实现原理1

MySql索引底层原理

为什么MySQL数据库索引选择使用B+树?

为什么MySQL数据库索引选择使用B+树?

为什么MySQL数据库索引选择使用B+树?

Mysql索引——B-Tree/B+Tree架构