欢迎来到天天文库
浏览记录
ID:57052171
大小:1.43 MB
页数:28页
时间:2020-07-29
《B+树和MySQL数据库索引.ppt》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、B+树及MySQL数据库索引厦门大学数据库实验室罗道文2014-08-02►B树以及B+树的特点以及原理►MySQL存储引擎MyISAM和InnoDB的B+树索引B树特性1.树中每个结点最多含有m个孩子(m>=2);2.除根结点和叶子结点外,其它每个结点至少有[ceil(m/2)]个孩子(其中ceil(x)是一个取上限的函数);3.若根结点不是叶子结点,则至少有2个孩子(特殊情况:没有孩子的根结点,即根结点为叶子结点,整棵树只有一个根节点);B树特性4.所有叶子结点都出现在同一层,叶子节点只有关键字,没有孩子和指向孩子的指针
2、5.每个非终端结点中包含有n个关键字信息:(n,P0,K1,P1,K2,P2,......,Kn,Pn)。其中:a)Ki(i=1...n)为关键字,且关键字按顺序升序排序K(i-1)3、35和三个存储其他磁盘页面地址的数据。根据算法我们发现17<29<35,因此我们找到指针p2。(3)根据p2指针,我们定位到磁盘块3,并将其中的信息导入内存。【磁盘IO操作2次】(4)此时内存中有两个文件名26,30和三个存储其他磁盘页面地址的数据。根据算法我们发现26<29<30,因此我们找到指针p2。(5)根据p2指针,我们定位到磁盘块8,并将其中的信息导入内存。【磁盘IO操作3次】(6)此时内存中有两个文件名28,29。根据算法我们查找到文件29,并定位了该文件内存的磁盘地址。B树插入►生成树从空树开始,逐个插入关键字4、。首先在最底层的节点添加一个关键字,如果该节点关键字个数不超过m-1,则插入完成,否则要产生节点分裂。1、咱们通过一个实例来逐步讲解下。插入以下字符字母到一棵空的B树中(非根结点关键字数小了(小于2个)就合并,大了(超过4个)就分裂):CNGAHEKQMFWLTZDPRXYS,首先,结点空间足够,4个字母插入相同的结点中,如下图:2、当咱们试着插入H时,结点发现空间不够,以致将其分裂成2个结点,移动中间元素G上移到新的根结点中,在实现过程中,咱们把A和C留在当前结点中,而H和N放置新的其右邻居结点中。如下图:3、当咱们插入E5、,K,Q时,不需要任何分裂操作4、插入M需要一次分裂,注意M恰好是中间关键字元素,以致向上移到父节点中5、插入F,W,L,T不需要任何分裂操作6、插入Z时,最右的叶子结点空间满了,需要进行分裂操作,中间元素T上移到父节点中,注意通过上移中间元素,树最终还是保持平衡,分裂结果的结点存在2个关键字元素。7、插入D时,导致最左边的叶子结点被分裂,D恰好也是中间元素,上移到父节点中,然后字母P,R,X,Y陆续插入不需要任何分裂操作(别忘了,树中至多5个孩子)。8.最后,当插入S时,含有N,P,Q,R的结点需要分裂,把中间元素Q上移到6、父节点中,但是情况来了,父节点中空间已经满了,所以也要进行分裂,将父节点中的中间元素M上移到新形成的根结点中。这样具体插入操作的完成。B树删除B树的删除操作原则:从某个节点删除一个元素之后,该节点仍然要符合B树特性,即关键字树n满足:(ceil(m/2)-1)<=n<=m-1,m表示最多含有m个孩子。当一个节点因为删除元素而不符合上述特性时,首先是向子节点索取元素,如果子节点刚好“脱贫”,就向兄弟节点索取,如果兄弟节点也是刚好“脱贫”,那么就与兄弟节点合并。下面通过实例讲解:操作构造的一棵5阶B树(树中最多含有m(m=5)个7、孩子,因此关键字数最小为ceil(m/2)-1=2。还是这句话,关键字数小了(小于2个)就合并,大了(超过4个)就分裂)为例,依次删除H,T,R,E。1、首先删除元素H,当然首先查找H,H在一个叶子结点中,且该叶子结点元素数目3大于最小元素数目ceil(m/2)-1=2,则操作很简单,咱们只需要移动K至原来H的位置,移动L至K的位置(也就是结点中删除元素后面的元素向前移动)2、下一步,删除T,因为T没有在叶子结点中,而是在中间结点中找到,咱们发现他的继承者W(字母升序的下个元素),将W上移到T的位置,然后将原包含W的孩子结点8、中的W进行删除,这里恰好删除W后,该孩子结点中元素个数大于2,无需进行合并操作。3、下一步删除R,R在叶子结点中,但是该结点中元素数目为2,删除导致只有1个元素,已经小于最小元素数目ceil(5/2)-1=2,而由前面我们已经知道:如果其某个相邻兄弟结点中比较丰满(元素个数大于ceil(5
3、35和三个存储其他磁盘页面地址的数据。根据算法我们发现17<29<35,因此我们找到指针p2。(3)根据p2指针,我们定位到磁盘块3,并将其中的信息导入内存。【磁盘IO操作2次】(4)此时内存中有两个文件名26,30和三个存储其他磁盘页面地址的数据。根据算法我们发现26<29<30,因此我们找到指针p2。(5)根据p2指针,我们定位到磁盘块8,并将其中的信息导入内存。【磁盘IO操作3次】(6)此时内存中有两个文件名28,29。根据算法我们查找到文件29,并定位了该文件内存的磁盘地址。B树插入►生成树从空树开始,逐个插入关键字
4、。首先在最底层的节点添加一个关键字,如果该节点关键字个数不超过m-1,则插入完成,否则要产生节点分裂。1、咱们通过一个实例来逐步讲解下。插入以下字符字母到一棵空的B树中(非根结点关键字数小了(小于2个)就合并,大了(超过4个)就分裂):CNGAHEKQMFWLTZDPRXYS,首先,结点空间足够,4个字母插入相同的结点中,如下图:2、当咱们试着插入H时,结点发现空间不够,以致将其分裂成2个结点,移动中间元素G上移到新的根结点中,在实现过程中,咱们把A和C留在当前结点中,而H和N放置新的其右邻居结点中。如下图:3、当咱们插入E
5、,K,Q时,不需要任何分裂操作4、插入M需要一次分裂,注意M恰好是中间关键字元素,以致向上移到父节点中5、插入F,W,L,T不需要任何分裂操作6、插入Z时,最右的叶子结点空间满了,需要进行分裂操作,中间元素T上移到父节点中,注意通过上移中间元素,树最终还是保持平衡,分裂结果的结点存在2个关键字元素。7、插入D时,导致最左边的叶子结点被分裂,D恰好也是中间元素,上移到父节点中,然后字母P,R,X,Y陆续插入不需要任何分裂操作(别忘了,树中至多5个孩子)。8.最后,当插入S时,含有N,P,Q,R的结点需要分裂,把中间元素Q上移到
6、父节点中,但是情况来了,父节点中空间已经满了,所以也要进行分裂,将父节点中的中间元素M上移到新形成的根结点中。这样具体插入操作的完成。B树删除B树的删除操作原则:从某个节点删除一个元素之后,该节点仍然要符合B树特性,即关键字树n满足:(ceil(m/2)-1)<=n<=m-1,m表示最多含有m个孩子。当一个节点因为删除元素而不符合上述特性时,首先是向子节点索取元素,如果子节点刚好“脱贫”,就向兄弟节点索取,如果兄弟节点也是刚好“脱贫”,那么就与兄弟节点合并。下面通过实例讲解:操作构造的一棵5阶B树(树中最多含有m(m=5)个
7、孩子,因此关键字数最小为ceil(m/2)-1=2。还是这句话,关键字数小了(小于2个)就合并,大了(超过4个)就分裂)为例,依次删除H,T,R,E。1、首先删除元素H,当然首先查找H,H在一个叶子结点中,且该叶子结点元素数目3大于最小元素数目ceil(m/2)-1=2,则操作很简单,咱们只需要移动K至原来H的位置,移动L至K的位置(也就是结点中删除元素后面的元素向前移动)2、下一步,删除T,因为T没有在叶子结点中,而是在中间结点中找到,咱们发现他的继承者W(字母升序的下个元素),将W上移到T的位置,然后将原包含W的孩子结点
8、中的W进行删除,这里恰好删除W后,该孩子结点中元素个数大于2,无需进行合并操作。3、下一步删除R,R在叶子结点中,但是该结点中元素数目为2,删除导致只有1个元素,已经小于最小元素数目ceil(5/2)-1=2,而由前面我们已经知道:如果其某个相邻兄弟结点中比较丰满(元素个数大于ceil(5
此文档下载收益归作者所有