MySQL专题面试题-二叉树、红黑树、B 树、B+树
演示网址:https://www.cs.usfca.edu/~galles/visualization/Algorithms.html
所谓的索引,就是帮助MySQL高效获取数据的排好序的数据结构,基本都是按照k-v形式存储。
1.二叉树
二叉树的每个节点至多只有2个叶子节点,且左边的叶子节点键值比根节点小,右边的叶子节点键值比根节点大。这些节点上都存储的索引值k,而v就是这条数据在磁盘上的首地址。下图是一棵普通的二叉树,插入的顺序是:5,3,4,2,6,7.

可以看出,当不断的插入比根节点大的值时,就会一直往右边节点添加。如果是自增的,那么右边的树深度就会高,查询效果不佳。
2.红黑树
红黑树是一种特殊的平衡二叉树,就是让节点分为红色和黑色两种,其中根节点为黑色,其插入效果如下,数据顺序还是:5,3,4,2,6,7.

可以看出,在插入时,会进行节点的旋转,以至于让其满足规则。即插入的节点键值处于当前两个节点中间时,会变化位置,以符合二叉树的规范,而且还使得树是平衡的。可想而知,这种方式在插入时,频繁的变换位置,也会影响插入效率。
3.B 树
B树也是二叉树的一种优化,但不同的是,其一个节点上可以有多个键值。其插入效果如下,数据顺序还是:5,3,4,2,6,7.

无论怎么变化,这种树都遵循二叉树的原则,也就是这些节点都是排好序的,根节点的左边节点键值比其小,右边节点键值比其大。 即使一个节点上有多个键值,也是有顺序的。
4.B+树
B+树是对B树的一种升级,区别在于在叶子节点上都有指针进行关联,而且叶子节点上也冗余存储了非叶子节点的数据。其插入效果如下,数据顺序还是:5,3,4,2,6,7.

那么在mysql的官方文档中,指出了叶子节点之间双向指针。而其最小的单位是page(页),一页是16KB(包含了页头,也目录和用户数据),数据都按照16KB的方式存到磁盘中,在查询时也是一次取出一页的数据进行判断。在数据插入时,会按照主键索引进行排序存储,上述的动态图已经很好的说明了这一点。排好序后,是非常便于查询的,当不符合条件时即可提前结束查询直接返回结果,而不至于扫描全表。但是对于其指针的特性,也是有缺陷的,如果要查询某一数据,必须按节点的先后顺序遍历很多次,因为链表插入的效率高,查询的效率低。那么此时页目录就派上用场了。页目录类似书籍的目录,对用户数据进行分组,其中目录项存储的是用户数据的起始项,结构如下图所示,左图是当只有一页时的场景,而右图是有多页时的场景。当然,又多页时,又变成了一个链表,此时就可以按照页目录的方式,对这些页再创建一个目录用来存储下面这些页目录的起始节点,而这个目录就是根节点。

那么在查询时,就可以先把页目录的数据拿出来进行比较,获取对应的组后再去用户数据区域遍历数据,减少了遍历的次数,提高了查询的效率,实际上是空间换时间的思想。
其实对于索引来说,除了B+Tree,还有hash,通过对key进行hash即可定位数据的位置,效率更高,但是其仅支持"="和"in",不支持范围查找,也会存在hash冲突问题。
MySQL专题面试题-二叉树、红黑树、B 树、B+树的更多相关文章
- 吐血整理:二叉树、红黑树、B&B+树超齐全,快速搞定数据结构
前言 没有必要过度关注本文中二叉树的增删改导致的结构改变,规则操作什么的了解一下就好,看不下去就跳过,本文过多的XX树操作图片纯粹是为了作为规则记录,该文章主要目的是增强下个人对各种常用XX树的设计及 ...
- 浅谈算法和数据结构: 七 二叉查找树 八 平衡查找树之2-3树 九 平衡查找树之红黑树 十 平衡查找树之B树
http://www.cnblogs.com/yangecnu/p/Introduce-Binary-Search-Tree.html 前文介绍了符号表的两种实现,无序链表和有序数组,无序链表在插入的 ...
- [BinaryTree] AVL树、红黑树、B/B+树和Trie树的比较
转自:AVL树.红黑树.B/B+树和Trie树的比较 AVL树 最早的平衡二叉树之一.AVL是一种高度平衡的二叉树,所以通常的结果是,维护这种高度平衡所付出的代价比从中获得的效率收益还大,故而实际的应 ...
- 为什么HashMap使用红黑树而不使用AVL树
为什么HashMap使用红黑树而不使用AVL树? 红黑树适用于大量插入和删除:因为它是非严格的平衡树:只要从根节点到叶子节点的最长路径不超过最短路径的2倍,就不用进行平衡调节 AVL 树是严格的平衡树 ...
- 二叉树,平衡树,红黑树,B~/B+树汇总
二叉查找树(BST),平衡二叉查找树(AVL),红黑树(RBT),B~/B+树(B-tree).这四种树都具备下面几个优势: (1) 都是动态结构.在删除,插入操作的时候,都不需要彻底重建原始的索引树 ...
- Java面试题之红黑树原理
红黑树原理: 每个节点都只能是红色或黑色的: 根节点是黑色的: 每个叶节点(空节点)是黑色的: 如果一个节点是红色的,那么他的子节点都是黑色的: 从任意一个节点到其每个子节点的路径都有相同数目的黑色节 ...
- B树,B+树,红黑树应用场景AVL树,红黑树,B树,B+树,Trie树
B B+运用在file system database这类持续存储结构,同样能保持lon(n)的插入与查询,也需要额外的平衡调节.像mysql的数据库定义是可以指定B+ 索引还是hash索引. C++ ...
- 二叉搜索树、AVL平衡二叉搜索树、红黑树、多路查找树
1.二叉搜索树 1.1定义 是一棵二叉树,每个节点一定大于等于其左子树中每一个节点,小于等于其右子树每一个节点 1.2插入节点 从根节点开始向下找到合适的位置插入成为叶子结点即可:在向下遍历时,如果要 ...
- 数据结构(5) 第五天 快速排序、归并排序、堆排序、高级数据结构介绍:平衡二叉树、红黑树、B/B+树
01 上次课程回顾 希尔排序 又叫减少增量排序 increasement = increasement / 3 + 1 02 快速排序思想 思想: 分治法 + 挖坑填数 分治法: 大问题分解成各个小问 ...
- 红黑树以及与AVL树的区别
http://blog.csdn.net/zwan0518/article/details/12219055 http://blog.csdn.net/v_july_v/article/details ...
随机推荐
- nordic nrf5340 使用问题记录
NCS2.9 使用SMP DFU服务实现OTA ncs2.9中官方对底层驱动又做了升级,单独使用一个进程对SMP进行初始化, 在将BLE初始化为slave,并广播后,只需在prj中添加以下配置: CO ...
- SciTech-Mathmatics - Advanced Linear Algebra(高等线性代数): Vector、Vectors、Vector Space 和 Matrix 的奇妙联系
SciTech-Mathmatics - Advanced Linear Algebra(高等线性代数): Vector.Vectors.Vector Space和 Matrix 的奇妙联系 \(\l ...
- Linux新建txt文档以及vim编辑
1.touch + qwe.txt(文件名 ) 创建文件akk.txt文件 2.vi akk.txt vi为进入vim编辑器命令,意为在vim编辑器中编辑qwe.txt文件 3.i i意为insert ...
- Qt/C++开发经验小技巧316-320
将QPointF转成经纬度坐标字符串的时候,默认会丢失精度,导致计算错误,尤其是在转换成经纬度坐标的时候,可以发现偏差很大,所以在转换的时候需要指定精度. QPointF p(1.23456789, ...
- 谈⼀谈ThreadLocal
ThreadLocal 是线程共享变量. ThreadLoacl 有⼀个静态内部类 ThreadLocalMap,其 Key 是 ThreadLocal 对象,值是 Entry 对象,ThreadLo ...
- Open-Source License Policy
Copyleft:要求修改后的代码必须以相同的许可证发布.Public:允许修改和分发,但可能需要提供原始代码的链接.Permissive:允许自由使用.修改和分发,通常不需要提供原始代码.Requi ...
- 音视频进阶教程-SEI直播补充增强信息实现
1 SEI功能简介 在音视频流媒体应用中,除了可以流媒体通道推拉音视频内容外,还可以使用流 SEI(Supplemental Enhancement Information,媒体补充增强信息)通过流媒 ...
- 没有vCenter怎么使用EXSI克隆虚拟机?
1.准备一台模板机 2.新建VMID(文件夹) 在你想新建虚拟机的位置上创建一个新目录,该目录名字在EXSI中就是VMID(PVE平台上的VMID是数字,且一般自动分配,可使用pm list在sh ...
- Python文件处理之购物车系统
一.Python文件处理之购物车系统 用户名和密码存放于文件中,格式为:nick,nick123 加载所有用户名,检查用户名是否已存在 启动程序后,先登录,登录成功则让用户输入工资,然后打印商品列表, ...
- LangGraph官方文档笔记——4.提示聊天机器人
目录 前言 官方资料 实践人工协助聊天机器人 创建可以人工协助的聊天机器人 前言 Agent 可能不可靠,并且可能需要人工输入才能成功完成任务.因此,您可能希望在运行之前需要人工批准,以确保一切按预期 ...