这篇文章解决一个问题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+树作为底层存储结构?相关推荐

  1. mysql -b -e_为什么 MongoDB 索引选择B-树,而 Mysql 索引选择B+树(精干总结)

    这个问题是我在看视频的时候老师提到的,虽然之前知道他们各自的索引结构但是还没有研究过原因.在网上一搜答案特别多.但是都特别的啰嗦.于是总结了这篇文章. 一.B-树和B+树的区别 很明显,我们要向弄清楚 ...

  2. mongodb mysql 知乎_为什么 MongoDB 索引选择B-树,而 Mysql 索引选择B+树(精干总结)...

    本文献给准备面试或者是还在面试的你.常见面试题,送分题目,不拿白不拿.本文收录在个人博客<愚公要移山>中,地址 www.javachat.cc 这篇是修改版,针对知乎上很多人提出的问题,进 ...

  3. 面试官常问:为什么 MongoDB 索引选择B-树,而 Mysql 索引选择B+树(精干总结)

    一.B树和B+树的区别 很明显,我们想向弄清楚原因就要知道B树和B+树的区别.为了不长篇大论.我们直接给出他们的形式总结他们的特点. 1.B树 B树是一种自平衡的搜索树,形式很简单: 这就是一颗B-树 ...

  4. mysql索引选择_MySQL 索引选择原则

    目的 MySQL查询优化器是基于代价(cost-based)的查询方式.因此,在查询过程中,最重要的一部分是根据查询的SQL语句,依据多种索引,计算查询需要的代价,从而选择最优的索引方式生成查询计划. ...

  5. 一文介绍 Mysql 索引模型 B+ 树

    点击上方 好好学java ,选择 星标 公众号 重磅资讯.干货,第一时间送达 今日推荐:后端程序员必备:书写高质量SQL的30条建议个人原创+1博客:点击前往,查看更多 来源:https://segm ...

  6. Mysql 索引模型 B+ 树详解

    一.认识二叉树 首先,在了解 mysql 中的 B+ 树之前,我们需要搞懂什么是二叉树.二叉树是一种常见的非线形数据结构,数据是以一对多的形态组织起来的,我画了一张图来帮助你理解: 在二叉树中,有一种 ...

  7. mysql索引 红黑树_为什么MySql索引使用B+树?

    前言 面试中我们经常碰到面试官问到数据库索引,问到索引就会问你索引的数据结构.类似这种数据结构对于普通程序员来说记住概念几天就忘了,而且概念不是每个人都能很好都理解,所以针对这一原因,我简单通俗都像大 ...

  8. mysql datetime timestamp 索引_MYSQL中时间类型底层存储,DATETIME ,TIMESTAMP,INT 如何选择?...

    在优化索引时,思考了一个问题,DATE, DATETIME, TIMESTAMP,还有INT存储的时间,在索引中哪个效率更高一些? 索引存储的,如果单纯的测试,而不去了解底层存储的方式和类型就不能断言 ...

  9. MySQL索引原理及BTree(B-/+Tree)结构详解

    目录 摘要 数据结构及算法基础 索引的本质 B-Tree和B+Tree B-Tree B+Tree 带有顺序访问指针的B+Tree 为什么使用B-Tree(B+Tree) 主存存取原理 磁盘存取原理 ...

最新文章

  1. Nanopore测序
  2. 7.22 校内模拟赛
  3. 1.5 编程基础之循环控制 05 最高的分数
  4. YouTube上最火的OpenCV-Python入门视频教程
  5. SharePoint 2010 中型场(Farm)——性能研究(来自DeLL技术中心博客)
  6. Ubuntu系统未发现vim命令
  7. 大疆新品:机甲大师RoboMaster S1介绍(AI 学习小伙伴)
  8. 使用Java打印三角形
  9. 对一些稀奇古怪面试题的理解
  10. 无需安装软件架设NOD32升级服务器指南!
  11. 《精通git》笔记之九(储藏与清理、签署工作、搜索)
  12. 怎么在电脑上进行音频以及视频的素材合并
  13. Linux高可用之heartbeat
  14. 在线加密解密网站大全2022(更新中ing)
  15. 走进区块链企业 | 区块链应用商店 BeeStore
  16. 一夜之间收到上百条短信,账户空了... 这种诈骗方式的背后技术原理
  17. 严重性代码说明项目文件行 禁止显示状态错误 C4996 scanf
  18. codeblocks||=== Build file: no target in no project (compiler: unknown) ===
  19. WORD2003电子签名插件(支持手写、签章)
  20. 从JDBC到Mybatis以及IDEA通过mybatis开发Springboot

热门文章

  1. 测试基础---软件开发生命周期
  2. 大小限制_微信传文件有大小限制怎么办?教你3秒把100MPPT压缩成10M
  3. 58同城post登陆参数分析,典型的eval加密js案例
  4. 六、Quartz-配置详解
  5. STM32启动代码学习
  6. 邻居表项的app_solicit数量
  7. ubuntu小技巧6--如何修复Ubuntu系统引导项
  8. 八分量基于区块链技术赋能我国工业互联网建设
  9. 如何学习一种开发框架
  10. 计算机word知识试题及答案,计算机二级考试word试题及答案