Mysql的索引--B树

        BTree是Mysql中常用的索引形式,今天我们就来研究一下B数这种数据结构,以加深对Mysql中BTree索引的了解,为Mysql数据库的查询优化打基础。本篇的内容主要参考严蔚敏的《数据结构》以及《高性能Mysql》一书,感兴趣的可以研读这两篇大作。

        1.树这种数据结构的相关定义

        先让我们来看看树这种数据结构中涉及到B树的几个定义:

        (1)度:树的节点的子树数成为节点的度,树的度是树内各节点的度的最大值;

        (2)深度:树中节点的最大层次称为树的深度。其中节点的层次指的是从根节点到某个节点的层级;

        (3)m叉树(m阶树):对于一颗根树,各节点的子节点最大数为m,则称该树为m叉树;

        (4)平衡树:平衡指的是所有叶子节点的深度趋于平衡

       2.B树的定义

        一颗m阶的B树,或为空树,或为满足下列特性的m叉树:

        (1)树中的每个节点最多有m颗子树;

        (2)若根节点不是叶子节点,则至少有两颗子树;

        (3)除根节点之外的所有非终端节点至少有⌈m/2⌉颗子树;

        (4)所有的非终端节点中包含下列信息数据

                   (n,A0,K1,A1,K2,A2,…,Kn,An),

         这里Ki(i=1,2,…,n)为关键字,且Ki<Ki+1(i=1,2,…,n-1);Ai(i=0,…,n)为指向子树根节点的指针,且指针Ai-1指向的子树中所有节点的关键字均小于Ki。需要说明的是,这里做了简化处理,实际上每个非终端数据节点还要包含n个指向关键字对应记录的指针。从数据库索引的角度很容易理解,关键字就是索引的值,而每个索引要指向对应的记录。

        (5)所有叶子节点都出现在同层上,平衡因子为0。

         如下图所示则为一颗4阶B树。

image

        节点说明:

        以图中虚线框中的节点为例:第一个数字2表示有两个关键字,分别为43和78。43左边的指针为A0,43跟78之间的指针为A1,78右边的指针为A2。其中A0指针所指向的节点的关键字小于43;A1指针指向的节点的关键字在43和78之间;A2指针指向的节点的关键字大于78。

        所以很容易理解,在B树中进行查找是一个顺着指针查找节点然后在节点的关键字中进行比较的过程。 

        3.B树的查找

        通过上面的讲解,大家基本上明白了B树是如何进行查找的,现在再来总结一下。

        首先,B树的查找分成两个过程:(1)在B树中找到节点;(2)在节点中找到关键字。由于B树通常存储在磁盘上,所以一般先是在磁盘中找到指针P所指节点,然后把节点信息读入内存,再通过顺序查找或者折半查找等办法找到关键字K。磁盘查找的效率相对内存要低很多,因此在磁盘上查找的次数(如果待查节点在B树中的层次越深,意味着需要查找的节点数越多,也就意味着在磁盘上查找的次数越多),是决定B树查找效率的首要因素。

posted on 2013-11-26 21:03  游戏小白成长之路  阅读(538)  评论(0编辑  收藏  举报

导航