数据库索引B-树和B+树
一开始学习数据结构的时候,主要学习的是数组,队列,链表,队列,栈,树这些数据结构,其中树主要学习二叉树,平衡二叉树,二叉搜索树等这些子节点最多只有两个的树结构。但是,当我们接触数据库的时候,你会发现数据库的索引基本都是B+树,尤其以数据库MySql为甚。那么学习的时候我们碰到B树,B+树,那么他们结构是什么样的,有什么区别,能用在什么地方呢?
什么是B树,B+树
B也就是Balance的意思。B树是一种多路搜索树,它的任意非叶子结点最多只有M个儿子,且M>2,它的每个节点不仅存储关键字,还存储数值。B+树也是一种多路搜索树,它的任意非叶子结点最多只有M个儿子,且M>2,它的每个节点只存储关键字,所有的数值放在非叶子节点上,并且所有的非叶子节点以链表的形式链接起来。(注意:B树和B-树是一回事,B-树是英语写法,连接符,二叉排序树是叫Binary Search Tree(BST),)
二叉搜索树有大量的技术人员在网上写出了具体的结构,实现形式,在此我就不多说了,你们可以参看。
下面我主要讲讲B-树和B+树,在讲之前,我们先来看看m-way查找树。
m-way查找树:
m-way查找树是是一种树形的存储结构,主要特点如下:
- 每个节点存储的key数量小于m个
- 每个节点的度小于等于m(树的度:非叶子节点含有的最大子节点数)
- 节点中的key按顺序大小排序
- 子树key值要完全小于、大于或介于父节点之间
举例:
3-way如下图所示,m为3,那么每个节点最多拥有为2个key(m-1)。
其中,待索引元素列表为:[5, 7, 12, 6, 8, 3, 4]
B-Tree查找树
B-Tree是一种平衡的m-way查找树,它可以利用多个分支节点(子树节点)来减少查询数据时所经历的节点数,从而达到节省存取时间的目的。
B查找树主要特点如下:
(其中ceil(x)是一个取上限的函数)
- 每个节点的key数量小于m个
- 每个节点的度小于等于m
- 除根节点和叶子节点的其他节点存储key的个数必须大于等于ceil(m/2)
- 若根结点不是叶子结点,则至少有2个孩子(特殊情况:没有孩子的根结点,即根结点为叶子结点,整棵树只有一个根节点)
- 每个叶子节点最少包含一个key和两个指针,最多包含m-1个key和m个指针,叶节点的指针均为null 。
- 所有叶子节点都处于同一层,也就是说所有叶节点具有相同的深度h(树的高度,也意味着树是平衡的)
B-Tree示意图如下:
由于B-Tree的特性,在B-Tree中按key检索数据的算法非常直观:首先从根节点进行二分查找,如果找到则返回对应节点的data,否则对相应区间的指针指向的节点递归进行查找,直到找到节点或找到null指针,前者查找成功,后者查找失败。
B+树
数据库索引B-树和B+树的更多相关文章
- 为什么MySQL数据库索引选择使用B+树?
在进一步分析为什么MySQL数据库索引选择使用B+树之前,我相信很多小伙伴对数据结构中的树还是有些许模糊的,因此我们由浅入深一步步探讨树的演进过程,在一步步引出B树以及为什么MySQL数据库索引选择使 ...
- 为什么选择B+树作为数据库索引结构?
背景 首先,来谈谈B树.为什么要使用B树?我们需要明白以下两个事实: [事实1] 不同容量的存储器,访问速度差异悬殊.以磁盘和内存为例,访问磁盘的时间大概是ms级的,访问内存的时间大概是ns级的.有个 ...
- B+树比B树更适合实际应用中操作系统的文件索引和数据库索引
B+树比B树更适合实际应用中操作系统的文件索引和数据库索引 为什么选择B+树作为数据库索引结构? 背景 首先,来谈谈B树.为什么要使用B树?我们需要明白以下两个事实: [事实1]不同容量的存储器, ...
- MySQL数据库中索引的数据结构是什么?(B树和B+树的区别)
B树(又叫平衡多路查找树) 注意B-树就是B树,-只是一个符号. B树的性质(一颗M阶B树的特性如下) 1.定义任意非叶子结点最多只有M个儿子,且M>2: 2.根结点的儿子数为[2, M]: 3 ...
- B树、B+树、红黑树、AVL树
定义及概念 B树 二叉树的深度较大,在查找时会造成I/O读写频繁,查询效率低下,所以引入了多叉树的结构,也就是B树.阶为M的B树具有以下性质: 1.根节点在不为叶子节点的情况下儿子数为 2 ~ M2. ...
- 【数据结构】B树、B+树详解
B树 前言 首先,为什么要总结B树.B+树的知识呢?最近在学习数据库索引调优相关知识,数据库系统普遍采用B-/+Tree作为索引结构(例如mysql的InnoDB引擎使用的B+树),理解不透彻B树,则 ...
- 谈谈MySQL数据库索引
在分析MySQL数据库索引之前,很多小伙伴对数据结构中的树理解不够深刻.因此我们由浅入深一步步探讨树的演进过程,再一步步引出MySQL数据库索引底层数据结构. 一.二叉树 二叉查找树也称为有序二叉查找 ...
- B树和B+树原理图文解析
B树与B+树不同的地方在于插入是从底向上进行(当然查找与二叉树相同,都是从上往下) 二者都通常用于数据库和操作系统的文件系统中,非关系型数据库索引如mongoDB用的B树,大部分关系型数据库索引使用的 ...
- 【转】B-树和B+树的应用:数据搜索和数据库索引
B-树 1 .B-树定义 B-树是一种平衡的多路查找树,它在文件系统中很有用. 定义:一棵m 阶的B-树,或者为空树,或为满足下列特性的m 叉树: ⑴树中每个结点至多有m 棵子树: ⑵若根结点不是叶子 ...
- 数据结构 B-树和B+树的应用:数据搜索和数据库索引
B-树 1 .B-树定义 B-树是一种平衡的多路查找树,它在文件系统中很有用. 定义:一棵m 阶的B-树,或者为空树,或为满足下列特性的m 叉树:⑴树中每个结点至多有m 棵子树:⑵若根结点不是叶子结点 ...
随机推荐
- tensorflow softplus应用
1.softplus函数表达式 图像: 2.tensorflow 举例 import tensorflow as tf input=tf.constant([0,1,2,3],dtype=tf.flo ...
- (转)linux常用查看硬件设备信息命令
场景:在一篇博客中看到这些总结性命令,感觉很实用就转载,以后用到进行相关的整理 系统 # uname -a # 查看内核/操作系统/CPU信息 # lsb_release -a # 查看操作系统版本 ...
- 关于position
一.position 一)语法: 看了那么久的语法,终于到了讲正题的时间了. 二)定位 1.相对定位:相对元素自己在没有定位之前的位置进行位移,元素仍然保留还没有原来的位置. 特性: 1)不脱离文档流 ...
- Java生成MD5加密字符串代码实例
这篇文章主要介绍了Java生成MD5加密字符串代码实例,本文对MD5的作用作了一些介绍,然后给出了Java下生成MD5加密字符串的代码示例,需要的朋友可以参考下 (1)一般使用的数据库中都会保存用 ...
- js实现轮播图效果(附源码)--原生js的应用
1.js实现轮播图效果 <!DOCTYPE html><html lang="en"><head> <meta charset=" ...
- YARN笔记——技术点汇总
目录 · 概况 · 原理 · 资源调度器分类 · YARN架构 · ResourceManager · NodeManager · ApplicationMaster · Container · YA ...
- ajax-javascript原生-初步入门01(整理)
-----------------------------------2017.07.21写----------------------------------------- 1.ajax的原名: a ...
- 基于angular2x+ng-bootstrap构建后台管理系统界面(干货)
写在前面的话 近来公司要做一个后台管理系统,人手比较少,于是作为一个前端也参与进来,其实据我所知,大部分的公司还是后台自己捣鼓的. 在后台没有到位的情况下,前端应该使用什么技术也着实让我为难了一把.经 ...
- Uva 122 树的层次遍历 Trees on the level lrj白书 p149
是否可以把树上结点的编号,然后把二叉树存储在数组中呢?很遗憾如果结点在一条链上,那将是2^256个结点 所以需要采用动态结构 首先要读取结点,建立二叉树addnode()+read_input()承担 ...
- Java 加载、链接、初始化
JVM 动态地加载.连接.初始化类或接口(在本文之后的篇幅中,我将使用"类"来表示"类和接口").这里我先贴上 Java 虚拟机规范的原文: Loading i ...