《MySQL系列-InnoDB引擎32》索引与算法-数据结构与算法

数据结构与算法

B+树索引是最为常见,也是在数据库中使用最为频繁的一种索引。

1 二分查找法

二分查找法(binary search)也称为折半查找法,用来查找一组有序的记录数组中的某一记录,其基本思想是:记录有序排列,在查找中采用跳跃式方式查找,即先以有序数列的中点位置作为比较对象,如果要查找的元素值小于该中点元素,则将待查序列缩小为左半部分,否则为右半福分。通过一次比较,将查找区间缩小一半。

如有5、10、19、21、31、37、42、48、50、52这10个数,现要从这10个数中查找48这条记录,则查找方式如下:

在这里插入图片描述

如上图所示,用了3次就找到48这个数,如果是顺序查找,则需要8次。因此二分查找法效率相对比顺序查找法好。比如对于如上十个数来说,如果是顺序查找法分别查找的话,分别是1+2+3+4+5+6+7+8+9+10=55次,也就是平均需要(1+2+3+4+5+6+7+8+9+10)\10=5.5次。如果是二分查找法的话,分别是4+3+2+4+3+1+4+3+2+3=29次,也就是平均需要(4+3+2+4+3+1+4+3+2+3)\10=2.9次所以就平均查找次数来说的话,二分查找法是较优的。而且在最坏的情况下,顺序查找法需要10次,二分查找法仅需要4次。

二分查找法的应用极其广泛,而且它的思想易于理解。第一个二分查找法在1946年就出现了,但是第一个完全正确的二分查找法直到1962年才出现。在数据库InnoDB引擎中,每页Page Directory中的槽是按照主键的顺序存放的,对于一条具体记录的查询是通过对Page Directory进行二分查找得到的。

2 二分查找树和平衡二叉树

在介绍B+树前,需要先了解一下二叉查找树。B+树是通过二叉查找树,再由平衡二叉树,B树演化而来。二叉树是一种经典的数据结构。

在二分查找树中,左子树的键值总是小于跟的键值,右子树的键值总是大于跟的键值。

在这里插入图片描述

如下图所示,也是二叉树,但是这种二叉树是效率较低的一种。

在这里插入图片描述

如果想最大性能的构造一颗二叉树,需要这颗二叉树是平衡的,从而引出新的定义-平衡二叉树,或称为AVL树。

平衡二叉树的定义:

首先二叉查找树的定义,其次必须满足任何节点的两个子树的高度最大差为1

平衡二叉树的查询速度的确很快,但是维护一颗平衡二叉树的代价是非常大的。通常来说,需要1次或多次左旋或右旋来得到插入或更新后的平衡性。但是平衡二叉树多用于内存结构对象中,因此维护的开销相对较小。

举例一:

在平衡二叉树基础上,再添加一条数据,为保持二叉树现状,进行一次左旋即可。

在这里插入图片描述

举例二:

如下图在平衡二叉树基础上,添加一条数据后,导致需要旋转多次才能达到二叉树平衡。

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/m0_51197424/article/details/129778264