B树:就是为了存储设备或者磁盘设计的一种平衡查找树。 对于一棵M阶的B树
1)树中的每个节点最多有m个孩子
2)除了根节点和叶子节点外,其他节点最少含有m/2(取上限)个孩子
3)若根节点不是叶子节点,则根节点最少含有两个孩子
4)所有叶子节点都在同一层,叶子节点不包含任何关键字信息
B树的插入
1)若B树已存在需要插入的键值时,用新的键值替换旧值;
2)若B树不存在这个值,则在叶子结点进行插入操作;
对于高度为h的m阶B树,新节点一般插在第h层。
判断当前结点key的个数是否小于等于m-1,如果满足,直接插入即可,如果不满足,将结点的中间的key
将这个结点分为左右两部分,中间的结点放到父节点中即可。
B树的删除
1)首先删除叶子节点元素,如果删除之后,叶子节点还是大于m/2,这种情况直接删除即可;
2)对于非叶子节点的删除,我们需要用后继key元素覆盖要删除的元素key,然后再后继key所在的子支
中删除该后继key;
3)如果删除叶子节点,如果删除元素后元素个数少于(m/2),并且它的兄弟节点的元素大于(m/2),
也就是说兄弟节点的元素比最少m/2还多,先将父节点的元素移到该节点,然后将兄弟节点的元素再移
动到父节点。
4)删除叶子结点,先考虑向兄弟节点借元素,借不了的话,首先,还是先将父节点的元素移到该节点,
然后,将当前节点及它的兄弟节点中的key合并,形成一个新的节点。
B+树
与B树的相似点
根节点至少一个元素
非根节点元素范围:m/2<=k<=m-1
插入操作:
当节点元素数量大于m-1的时候,按中间元素分裂成左右两部分,中间元素分裂到父节点当做索引存
储,但是,本身中间元素还是分裂右边这一部分的。
show create table TABLE_NAME;
对于一棵M阶的B树
1)树中的每个节点最多有m个孩子
2)除了根节点和叶子节点外,其他节点最少含有m/2(取上限)个孩子
3)若根节点不是叶子节点,则根节点最少含有两个孩子
4)所有叶子节点都在同一层,叶子节点不包含任何关键字信息。
1)若B树已存在需要插入的键值时,用新的键值替换旧值;
2)若B树不存在这个值,则在叶子结点进行插入操作;删除操作
因为叶子节点有指针的存在,向兄弟节点借元素时,不需要通过父节点了,而是可以直接通过兄弟节点
移动即可(前提是兄弟节点的元素大于m/2),然后更新父节点的索引;如果兄弟节点的元素不大于
m/2(兄弟节点也没有多余的元素),则将当前节点和兄弟节点合并,并且删除父节点中的key。
B树相对于B+树的优点是,如果经常访问的数据离根节点很近,而B树的非叶子节点本身存在有关键字及
其数据的地址,所以这种数据检索的时候会比B+树快。
B+树(InnoDB、MyISAM使用B+树作为索引): 所有的数据都保存在叶子上,能出现重复节点 ,自动
隐藏索引;
区别:B+可以出现重复节点,B-树不能出现重复节点
B+树矮胖,B-树高瘦
B+树通过最下面叶子结点的链表进行查找
B+树的节点包含特征索引,B-树仅包含数据