面试题-为什么索引使用B+树、而不是B树?或者其他红黑树,二叉树
介绍下B树和B+树
B树
b树是一种平衡多路查找树、相比平衡二叉树它一个节点可以存多个元素、一棵m(m是指一个节点最多有几个子节点)阶的B 树有以下特性:
- 树中根节点若不是子树、必须至少有两个子节点。
- 除根节点和叶子结点其他结点至少有[ceil(m/2)](向上取整、比如m=5,就至少有3个子节点)个节点。
- 节点存储的元素的个数范围是 [ceil(m / 2)-1]<= n <= m-1个
- B树叶子结点不包含任何元素、也就是null(为空的目的是查到叶子结点表示没有找到返回null)
B+树
B+树是B树的加强版、B+树与B树的差异在于
- 所有的数据全部存储在叶子节点上,且叶子节点本身根据关键字自小而大顺序连接
- 非叶子节点相当于叶子节点的索引,叶子节点相当于是存储(关键字)数据的数据层。
- 叶子节点会有指针指向下一个节点。方便于范围查找
为什么索引使用B+树、而不是B树?或者其他红黑树,二叉树
在mysql中数据是通过文件保存在磁盘的、所以在查询数据库时我们要去访问数据库文件、访问磁盘上的文件就要进行磁盘上的IO操作,磁盘上的IO操作相比内存上的IO操作存在机械远动、所以磁盘IO操作是相当费时间的。
B树B+树相比其他树
假设我们使用红黑树保存数据、一个节点只能存一个数据、这样会导致树的高度会大、在进行读取元素时会进行大量的频繁的IO操作会导致访问性能非常低。
B+和B树是一种一个节点可存成千上万个数据的平衡多路查找树、可以极大的降低高度、根据磁盘查找存取的次数往往由树的高度所决定、B树和B+树大大提高了查询的效率。
B+树相比B树
而B+树相对于B树来说、B + 树只有叶节点存放数据,其余节点用来索引,而 B 树是每个索引节点都会 有 Data 域。这无疑增大了节点大小,指针少的情况下要保存大量数据,只能增加树的高度,导致 IO 操作变多,查询性能变低,而 B + 树除了叶子节点其它节点并不存储数据,节点小,磁盘 IO 次数就少。这是优点之一。
另一方面B + 树所有的 Data 域在叶子节点,一般来说都会进行一个优化,就是将所有的叶子节点用指针串起来。这样遍历叶子节点就能获得全部数据,这样就能进行区间访问啦。在数据库中基于范围的查询是非常频繁的,而 B 树不支持这样的遍历操作。
总结一下:
使用B+树而不是B树的原因B+树节点大小更小,一次IO读入的节点数更多B+树的数据都在叶子节点中,遍历和区间访问性能大幅提高B+树查询效率稳定
使用B+树而不是AVL树、红黑树的原因B+树的树高比AVL树、红黑树低,IO次数少
参考博文
MySQL索引底层实现原理
为什么 Mysql 用 B + 树做索引而不用 B 树或红黑树
为什么MySQL索引要用B+树,而不是B树?
从B树、B+树、B*树谈到R 树
总结
文章是参考多篇博客总结而成、主要是用于面试回答。想详细了解可以看下我外链的参考博文。
面试题-为什么索引使用B+树、而不是B树?或者其他红黑树,二叉树相关推荐
- MySQL面试:索引为啥使用B+树而不是B树
索引的本质 数据库索引,就是数据库管理系统(DBMS)中一个排序的数据结构,用以协助快速查询,更新数据库表中数据 首先数据是以文件的形式存放在磁盘上面的,每一行数据都有它的磁盘地址.如果没有索引的话, ...
- 储存引擎InnoDB 索引选择 为何是B+树 而不是 B树 哈希表
一:概述 首先需要澄清的一点是,MySQL 跟 B+ 树没有直接的关系,真正与 B+ 树有关系的是 MySQL 的默认存储引擎 InnoDB,MySQL 中存储引擎的主要作用是负责数据的存储和提取,除 ...
- mysql为什么不用b树_MySQL用B+树(而不是B树)做索引的原因
众所周知,MySQL的索引使用了B+树的数据结构.那么为什么不用B树呢? 先看一下B树和B+树的区别. 1.B树 维基百科对B树的定义为"在计算机科学中,B树(B-tree)是一种树状数据结 ...
- 数据库为什么使用B+树而不是B树
B树和B+树的区别主要有两点: 在B树中,你可以将键和值存放在内部节点和叶子节点,但在B+树中,内部节点都是键,没有值.叶子节点同时存放键和值 B+树的叶子节点有一条链相连,而B+树的叶子节点各自独立 ...
- 2020最新MySQL数据库面试题( MySQL引索系统+MySQL数据架构+红黑树结构图+B+树)
视频参考一线互联网大佬一堂课教会你那些年,你未曾了解的MySQL索引优化 [建议收藏] '阿里高级架构师一个视频教会你MySql 各大知识点MySQL系列/ MySQL引索系统/MySQL数据架构/红 ...
- 二叉树、B树(B-树)、B+树、B*树详解,以及为什么MySQL选择B+树做索引
温故而知新,可以为师矣.看到一篇介绍B数和B减树的文章,这里记录一下. 1. 简要 众所周知,MySQL的索引使用了B+树的数据结构.那么为什么不用B树呢? 先看一下B树和B+树的区别. 2. 二叉树 ...
- 二叉排序树、平衡二叉树、红黑树、B树、B+树
全民制作人们,大家好.我是练习时长两天半的个人练习册,喜欢B树 ,B+树, BST树, AVL树,来 red black ~ 目录 一.二叉排序树(BST树) 1.1二叉排序树的定义 1.2二叉排序 ...
- Linux内核之于红黑树and AVL树
为什么Linux早先使用AVL树而后来倾向于红黑树? 实际上这是由红黑树的实用主义特质导致的结果,本短文依然是形而上的观点.红黑树可以直接由2-3树导出,我们可以不再提红黑树,而只提2- ...
- B树,B+树,红黑树应用场景AVL树,红黑树,B树,B+树,Trie树
B B+运用在file system database这类持续存储结构,同样能保持lon(n)的插入与查询,也需要额外的平衡调节.像mysql的数据库定义是可以指定B+ 索引还是hash索引. C++ ...
- 平衡二叉树(AVL树)和红黑树区别
1.二叉搜索树,平衡二叉树,红黑树的算法效率 操作 二叉查找树 平衡二叉树 红黑树 查找 O(n) O(logn) O(log2 n) 插入 O(n) O(logn) O(log2 n) 删除 O(n ...
最新文章
- 如何从0写一个服务网关?
- 每日一皮:完美的结对编程!
- CSDN Markdown 博客如何设置插入代码背景颜色(设置成黑色)?
- go语言中goroutine池
- mysql sqlite 分页查询_php基于SQLite实现的分页功能示例
- 【Java静态代理】以模拟“婚庆公司帮助你嫦娥奔月”为例
- antd 日期时间选择_Excel最全时间类函数总结,有必要收藏一下哦
- glyphicons-halflings-regular.woff2 文件 404
- 01.J2EE开发环境搭建
- OSPF沉默接口配置
- 倍数(Python)
- cadence 通孔焊盘_Allegro 16.6创建通孔类焊盘步骤
- 强生单剂新冠疫苗对“德尔塔”有效;赛诺菲巴斯德将每年投资4亿欧元建mRNA疫苗中心 | 美通社头条...
- 一篇很完整的元器件选型指南
- AVFrame相关api内存管理
- android speex AEC 回音消除
- 在Windows下正确地编译最新的pytorch和tensorflow
- 基于单片机的宠物定时喂食器设计
- ffmpeg录制桌面(队列方式)
- FineUI(专业版)v3.2.0 发布(ASP.NET UI控件库)!