一、MySQL Index 的插入

有如下B+树,其高度为2,每页可存放4条记录,扇出为5。所有记录都在叶子节点上,

并且是顺序存放,如果用户从最左边的叶子节点开始顺序遍历,可以得到所有简直的顺序

排序:5、10、15、20、25、30、50、55、60、65、75、80、85、90。

B+树的插入操作,分为三种情况

1、Leaf Page和Index Page都没满

用户插入28这个值,Leaf Page和Index Page都没满,直接插入即可

2、Leaf Page已经满了,Index Page没有满

用户插入70这个值,Leaf Page已经满了,Index Page没有满。

这是插入Leaf Page后情况为50、55、60、65、70,并根据中间值60来拆分叶节点。

3、Leaf Page和Index Page都满了

插入95这个值,Leaf Page和Index Page都满了,这是需要两次拆分

1)首先插入Leaf Page后情况为75、80、85、90、95,由于Leaf Page已经满了,需要根据中间值85拆分叶节点,小于85的放左边即75、80;

大于等于85的放右边即85、90、95。

2)将中间节点85放入Index Page后,Index Page的值为25、50、60、75、85,由于Index Page也满了,需要拆分Index Page,取中间值60,

放入上层Index Page中,小于60的25、50放在左边;大于60的值75、85放在右边。

4、B+树的旋转(继承平衡二叉树的旋转功能)

不管怎么变化B+树总是保持平衡。但是为了保持平衡杜宇先插入的键值可能需要做大量的拆分操作。因为B+树结构主要用于磁盘,页的拆分意味着磁盘操作,所以应该在可能的情况下尽量减少页的拆分操作。因此,B+树同样提供了类似平衡二叉树的旋转(Rotation)功能。

旋转发生在Leaf Page已满,其左右兄弟没满的情况下。B+树不急于做拆分,通常情况下左兄弟会被首先检查用来做旋转操作。

插入键值70,其实B+树并不会急于去拆分叶子节点,而是去做旋转操作,得到如图

采用旋转操作使得B+树减少了一次页的拆分操作,同时B+树的高度依然是2。

二、MySQL Index 的删除

B+树使用填充因子(fill factor)来控制树的删除变化,50%是填充因子可以设置的最小值。B+树的删除操作同样必须保证删除后叶子节点中的记录依然排序,同插入一样,B+树的删除操作同样有三种情况,与插入不同的是,删除时根据填充因子的变化衡量。

1、叶子节点大于填充因子、中间节点大于填充因子

1)删除键值为70的这条记录,该记录符合第一种情况,删除后可得下图

2)接着5-11,再删除键值为25的记录,这也是讨论的第一种情况,但是该值是Index Page中的值,因此在删除Leaf Page中的25后,还应该将25的兄弟节点的28更新到Page Index中。

2、叶子节点小于填充因子、中间节点大于填充因子

3、叶子节点小于填充因子、中间节点小于填充因子

最后删除键值60的情况。删除Leaf Page中键值为60的记录后,Fill Factor小于50%,这时需要做合并操作,同样,再删除Index Page中相关记录后,需要做Index Page的合并操作,最后如图

三、一些概念

1、索引扇出

扇出:是指该模块直接调用的下级模块的个数。扇出大表示模块的复杂度高,需要控制和协调过多的下级模块;但扇出过小(例如总是1)也不好。
扇出过大一般是因为缺乏中间层次,应该适当增加中间层次的模块。扇出太小时可以把下级模块进一步分解成若干个子功能模块,或者合并到它的上级模块中去。

2、索引填充因子

和索引重建最相关的是填充因子。当创建一个新索引,或重建一个存在的索引时,你可以指定一个填充因子,它是在索引创建时索引里的数据页被填充的数量。填充因子设置为100意味着每个索引页100%填满,50%意味着每个索引页50%填满。
如果你创建一个填充因子为100的聚集索引(在一个非单调递增的列上),那意味着每当一个记录被插入(或修改)时,页拆分都会发生,因为在现存的页上没有这些数据的空间。

MySQL B+树 的插入与删除的更多相关文章

  1. B树和B+树的插入、删除图文详解

    简介:本文主要介绍了B树和B+树的插入.删除操作.写这篇博客的目的是发现没有相关博客以举例的方式详细介绍B+树的相关操作,由于自身对某些细节也感到很迷惑,通过查阅相关资料,对B+树的操作有所顿悟,写下 ...

  2. B树和B+树的插入、删除图文详解(good)

    B树和B+树的插入.删除图文详解 1. B树 1. B树的定义 B树也称B-树,它是一颗多路平衡查找树.我们描述一颗B树时需要指定它的阶数,阶数表示了一个结点最多有多少个孩子结点,一般用字母m表示阶数 ...

  3. B+树的插入、删除(附源代码)

    B+ Tree Index B+树的插入 B+树的删除 完整测试代码 Basic B+树和B树类似(有关B树:http://www.cnblogs.com/YuNanlong/p/6354029.ht ...

  4. AVL树的插入与删除

    AVL 树要在插入和删除结点后保持平衡,旋转操作必不可少.关键是理解什么时候应该左旋.右旋和双旋.在Youtube上看到一位老师的视频对这个概念讲解得非常清楚,再结合算法书和网络的博文,记录如下. 1 ...

  5. AVL 树的插入、删除、旋转归纳

    参考链接: http://blog.csdn.net/gabriel1026/article/details/6311339   1126号注:先前有一个概念搞混了: 节点的深度 Depth 是指从根 ...

  6. 转:B树和B+树的插入、删除图文详解

    如需转载,请注明出处 http://www.cnblogs.com/nullzx/ 1. B树 1. B树的定义 B树也称B-树,它是一颗多路平衡查找树.我们描述一颗B树时需要指定它的阶数,阶数表示了 ...

  7. AVL树的插入和删除

    一.AVL 树 在计算机科学中,AVL树是最早被发明的自平衡二叉查找树.在AVL树中,任一节点对应的两棵子树的最大高度差为 1,因此它也被称为高度平衡树.查找.插入和删除在平均和最坏情况下的时间复杂度 ...

  8. trie树---(插入、删除、查询字符串)

    HDU   5687 Problem Description 度熊手上有一本神奇的字典,你可以在它里面做如下三个操作:  1.insert : 往神奇字典中插入一个单词  2.delete: 在神奇字 ...

  9. MySQL 向表中插入、删除数据

    一.向表中插入一条信息 1.查看表中的数据 mysql> SELECT * FROM user; +----+---------+----------+ | id | account | pas ...

随机推荐

  1. dict字典

    dict字典 字典的概述 • 概述:使⽤键-值(key-value)⽅式存储. • key的特点: • 1.字典中的key必须是唯⼀的 • 2.key值必须是不可变的数据类型:字符串.元组.Numbe ...

  2. STM32的I2C特性及架构

    软件模拟协议:使用CPU直接控制通讯引脚(GPIO)的电平,产生出符合通讯协议标准的逻辑. 硬件实现协议:由STM32的I2C片上外设专门负责实现I2C通讯协议,只要配置好该外设,它就会自动根据协议要 ...

  3. S04_CH01_搭建工程移植LINUX/测试EMMC/VGA

    S04_CH01_搭建工程移植LINUX/测试EMMC/VGA 1.1概述: 本章内容是在已经提供安装了VIVADO2015.4 的ubuntu系统下,进行.大家可以下周我们已经提供的虚拟机镜像,我们 ...

  4. java之理解面向对象

    1.程序设计的三种基本结构 顺序结构 顺序结构表示程序中的各操作是按照它们在源代码中的排列顺序依次执行的 选择结构 选择结构表示程序的处理需要根据某个特定的条件选择其中的一个分支执行.选择结构有单选择 ...

  5. Linux下/etc/login.defs文件

    /etc/login.defs文件定义了与/etc/password和/etc/shadow配套的用户限制设定.这个文件是需要的,缺失并不会影响系统的使用,但是也许会产生意想不到的错误. 如果/etc ...

  6. 第八讲,TLS表(线程局部存储)

    一丶复习线程相关知识 首先讲解TLS的时候,需要复习线程相关知识,  (thread local storage ) 1.了解经典同步问题 首先我们先写一段C++代码,开辟两个线程去跑,看看会不会出现 ...

  7. (八)springmvc之静态资源的访问。

    一.直接调用 行内样式或者js直接调用没有问题. <span style="font-size:26px;color: Blue">行内样式</span> ...

  8. 【SQL Server性能优化】删除大量数据的方法比较

    原文:[SQL Server性能优化]删除大量数据的方法比较 如果你要删除表中的大量数据,这个大量一般是指删除大于10%的记录,那么如何删除,效率才会比较高呢? 而如何删除才会对系统的影响相对较小呢? ...

  9. C#四种深拷贝方法(转载)

    原文地址:https://www.cnblogs.com/profession/p/6222489.html //四种深拷贝方法 public static T DeepCopyByReflect&l ...

  10. TCP协议和UDP协议的对比【转】

    原文:https://blog.csdn.net/lzj2504476514/article/details/81454754 一.TCP协议的主要特点(1)TCP是面向连接的运输层协议:(2)每一条 ...