二叉树存储结构 mysql_为什么mysql索引选择b+树作为底层存储结构?
这篇文章解决一个问题mysql 底层为什么是用b+树作为存储结构?为什么不是二叉树,红黑树,b树?
我们先构造一个应用场景,我们有1kw的数据需要存储在一张表里面,那么我们怎么设计能让查询速度尽可能的快
ok,我们先来看下二叉树怎么存储这1kw数据,假设我有一张表,这张表里只有一个字段,他是递增的,看看用二叉树是什么情形
于是,我们看到,在这种情况下二叉树直接退化成了一个链表,我们如果要找到5这个记录,需要查找5次,n条数据就要查找n次,复杂度O(n), 不满足我们的需求
我们再来看看红黑树
我们看到红黑树有一个自平衡的特性,以牺牲插入性能解决了退化成链表的问题,但随着记录树的增加,树的高度会不断增加,那么,我们想找到第1kw个数据,依然要查找很多次,对应到mysql上每次读取一个树的节点都需要进行一次io,那么还有没有更好的办法呢?
ok,接下来看看b树
可以明显看到的区别是,每一个节点上存储了多个数据,其实逻辑很简单嘛,想保证高度固定,那就横向上想办法,这样的话我们查找16这条记录,其实只需要经过3次io就可以了
那b+树和b树又有什么区别呢?引用网上的一张图说明一下
具体到mysql上就是有冗余索引,方便查找
只在叶子节点上存储数据,16k(mysql innodb_page_size的默认大小)的内存可以存下更多数据,降低高度,查询更快
叶子节点增加了双向链表,方便范围查询
于是,我们就明白了,为什么mysql要用b+树作为底层数据结构,1kw的数据,索引应用合理,可能3次或者4次io就可以定位到记录了。
二叉树存储结构 mysql_为什么mysql索引选择b+树作为底层存储结构?相关推荐
- mysql -b -e_为什么 MongoDB 索引选择B-树,而 Mysql 索引选择B+树(精干总结)
这个问题是我在看视频的时候老师提到的,虽然之前知道他们各自的索引结构但是还没有研究过原因.在网上一搜答案特别多.但是都特别的啰嗦.于是总结了这篇文章. 一.B-树和B+树的区别 很明显,我们要向弄清楚 ...
- mongodb mysql 知乎_为什么 MongoDB 索引选择B-树,而 Mysql 索引选择B+树(精干总结)...
本文献给准备面试或者是还在面试的你.常见面试题,送分题目,不拿白不拿.本文收录在个人博客<愚公要移山>中,地址 www.javachat.cc 这篇是修改版,针对知乎上很多人提出的问题,进 ...
- 面试官常问:为什么 MongoDB 索引选择B-树,而 Mysql 索引选择B+树(精干总结)
一.B树和B+树的区别 很明显,我们想向弄清楚原因就要知道B树和B+树的区别.为了不长篇大论.我们直接给出他们的形式总结他们的特点. 1.B树 B树是一种自平衡的搜索树,形式很简单: 这就是一颗B-树 ...
- mysql索引选择_MySQL 索引选择原则
目的 MySQL查询优化器是基于代价(cost-based)的查询方式.因此,在查询过程中,最重要的一部分是根据查询的SQL语句,依据多种索引,计算查询需要的代价,从而选择最优的索引方式生成查询计划. ...
- 一文介绍 Mysql 索引模型 B+ 树
点击上方 好好学java ,选择 星标 公众号 重磅资讯.干货,第一时间送达 今日推荐:后端程序员必备:书写高质量SQL的30条建议个人原创+1博客:点击前往,查看更多 来源:https://segm ...
- Mysql 索引模型 B+ 树详解
一.认识二叉树 首先,在了解 mysql 中的 B+ 树之前,我们需要搞懂什么是二叉树.二叉树是一种常见的非线形数据结构,数据是以一对多的形态组织起来的,我画了一张图来帮助你理解: 在二叉树中,有一种 ...
- mysql索引 红黑树_为什么MySql索引使用B+树?
前言 面试中我们经常碰到面试官问到数据库索引,问到索引就会问你索引的数据结构.类似这种数据结构对于普通程序员来说记住概念几天就忘了,而且概念不是每个人都能很好都理解,所以针对这一原因,我简单通俗都像大 ...
- mysql datetime timestamp 索引_MYSQL中时间类型底层存储,DATETIME ,TIMESTAMP,INT 如何选择?...
在优化索引时,思考了一个问题,DATE, DATETIME, TIMESTAMP,还有INT存储的时间,在索引中哪个效率更高一些? 索引存储的,如果单纯的测试,而不去了解底层存储的方式和类型就不能断言 ...
- MySQL索引原理及BTree(B-/+Tree)结构详解
目录 摘要 数据结构及算法基础 索引的本质 B-Tree和B+Tree B-Tree B+Tree 带有顺序访问指针的B+Tree 为什么使用B-Tree(B+Tree) 主存存取原理 磁盘存取原理 ...
最新文章
- Nanopore测序
- 7.22 校内模拟赛
- 1.5 编程基础之循环控制 05 最高的分数
- YouTube上最火的OpenCV-Python入门视频教程
- SharePoint 2010 中型场(Farm)——性能研究(来自DeLL技术中心博客)
- Ubuntu系统未发现vim命令
- 大疆新品:机甲大师RoboMaster S1介绍(AI 学习小伙伴)
- 使用Java打印三角形
- 对一些稀奇古怪面试题的理解
- 无需安装软件架设NOD32升级服务器指南!
- 《精通git》笔记之九(储藏与清理、签署工作、搜索)
- 怎么在电脑上进行音频以及视频的素材合并
- Linux高可用之heartbeat
- 在线加密解密网站大全2022(更新中ing)
- 走进区块链企业 | 区块链应用商店 BeeStore
- 一夜之间收到上百条短信,账户空了... 这种诈骗方式的背后技术原理
- 严重性代码说明项目文件行	禁止显示状态错误 C4996 scanf
- codeblocks||=== Build file: no target in no project (compiler: unknown) ===
- WORD2003电子签名插件(支持手写、签章)
- 从JDBC到Mybatis以及IDEA通过mybatis开发Springboot