mysql为什么要用b+树

先看原因:
1.B+树减少了IO次数,效率更高
(这里这么理解:-----就是减少了磁盘的访问次数,毕竟内存速度要比磁盘快的多)
2.B+树查询跟稳定,因为所有数据放在叶子节点
3.B+树范围查询更好,因为叶子节点指向下一个叶子结点


介绍

一般查询一堆数据会使用到的数据结构是:哈希表、B+树。mysql使用的是B+树。
B+树是通过二叉查找树,再由平衡二叉树(B-树)演变而来。
但B+树不是二叉树
科普:什么叫二叉树

  1. ⾮叶⼦节点最多拥有两个⼦节点
  2. ⾮叶⼦节值⼤于左边⼦节点、⼩于右边⼦节点
  3. 没有值相等重复的节点;

二叉树如图:

比如:你想找到008,先和006比对,008大于006,则和007比对,一次类推。每一次比对都能排除一半的数据,是不是效率比较高。
既然二叉树查询效率比较高,那为啥还需引进平衡二叉树呢?
那是因为二叉树会有一种极端的情况:

这个也是满足二叉树的极端情况,你想找到0008的,则必须经过4次比对。效率低下!
平衡二叉树则是在二叉树的条件下多了一个限制条件:树的左右两边的层级数相差不会⼤于1
这样就不会让二叉树处于一条线的极端情况了。
平衡⼆叉树的查找效率确实很快,但维护⼀颗平衡⼆叉树的代价是⾮常⼤的,需要1次或多次左旋和右旋来得到插
⼊或更新后树的平衡性。

那么又问题来了,既然平衡二叉树查询效率这么高了,为什么还需要引入B树和B+树呢???


B树和B+树

B树和B-树是同⼀种树,假如⽤平衡⼆叉树实现索引效率已经很⾼了,查找⼀个节点所做的IO次数是这个节点所处
的树的⾼度,因为我们⽆法把整个索引都加载到内存,并且节点数据在磁盘中不是顺序排放的。所以最快情况下,
磁盘的IO次数为数的高度。虽然平衡⼆叉树查找效率确实很⾼,但是频繁的IO才是阻碍提⾼性能的瓶颈,怎样减少IO次数呢?前辈们很聪明的提出了局部性原理,分为时间局部性原理,即加⼊你查询id为1的⽤户数据,过⼀段时间你还会查询id为1的数据,所以会将这部分数据缓存下来。空间局部性原理,当你查询id为1的⽤户数据的时候,你有很⼤的概率会去查询id为2,3,4的⽤户的数据,所以会⼀次性的把id为1,2,3,4的数据都读到内存中去,这个最小的单位就是页。
简单来说CPU进行运算是电⼦运动,计算速度很快。而将数据从硬盘读取到内存中是机械运动,很慢。我们在买硬盘的时候经常问这个硬盘是多少转(每分钟转动的圈数),7200转,5400转。所以说转动的越快加载数据越快,但是和CPU比起来差的还很远,所以说要减低IO次数。

B树:

b+树:

B+树和B树由什么区别?
1.B+树的的非叶子节点只存储索引,叶子节点存储数据(所以B+树能存储更多的索引,并且查询次数也是一样的)
2.B+树每个叶子节点都包含了根节点的键值数据,每个叶子节点的关键字从小到大链

在B树的基础上每个节点存储的关键字数更多,树的层级更少所以查询数据更快,所有关键字指针都存在叶⼦节 点,所以每次查找的次数都相同所以查询速度更稳定。 除此之外,B+树的叶⼦节点是跟后序节点相连接的,这对范围查找是⾮常有⽤的。 看到没B+树的⾮叶⼦节点是主键,主键占⽤的空间越⼩,每个节点能放的主键就能更多,这就是为什么我们的主键 ⼀般不设置太⼤的原因。主键占⽤的空间⼩,能降低树⾼,减少IO次数

未完待续~~~

mysql为什么要用b+树相关推荐

  1. 为什么MySQL数据库要用B+树存储索引?

    小史是一个应届生,虽然学的是电子专业,但是自己业余时间看了很多互联网与编程方面的书,一心想进BAT互联网公司. 话说两个多月前,小史通过了A厂的一面,两个多月后的今天,小史终于等到了A厂的二面. 简单 ...

  2. mysql存储base64位用什么类型_【漫画】面试现场:为什么MySQL数据库要用B+树存储索引?...

    推荐阅读:MySQL最全整理(面试题+笔记+导图),面试大厂不再被MySql难倒! 小史是一个应届生,虽然学的是电子专业,但是自己业余时间看了很多互联网与编程方面的书,一心想进BAT互联网公司. 话说 ...

  3. 为什么MySQL数据库要用B+树存储索引

    A:为什么MySQL数据库要用B+树存储索引? Hash的查找速度为O(1),而树的查找速度为O(log2n),为什么不用Hash作为数据库的存储索引呢? 树的话,无非就是前中后序遍历.二叉树.二叉搜 ...

  4. 漫画 | 为什么 MySQL 数据库要用 B+ 树存储索引?

    作者 |  channingbreeze 责编 | 郭芮 小史是一个应届生,虽然学的是电子专业,但是自己业余时间看了很多互联网与编程方面的书,一心想进BAT互联网公司. 话说两个多月前,小史通过了A厂 ...

  5. 16kb等于多少b_面试官:MySQL索引为何选择B+树?

    声明 本文所述的各种数据结构(二叉树等),均不考虑重复值的情况,本文简述各种数据结构的区别仅仅只是为了理解MySQL索引的需要而做的铺垫. 什么是索引 提起索引,大家都知道,建立索引可以让数据库查询更 ...

  6. b-tree和b+tree以及mysql为什么使用了b+树

    最近写了一些mysql的博客,但是对于索引的数据结构一致没有深入的描述过.所以就有了这一篇文章. b tree和b-tree就是一个玩意 应该很多人都看到过b树和b-树,还有b+树,不了解的小伙伴还以 ...

  7. 【mysql innodb索引结构B+树】

    [mysql innodb索引结构B+树] 为什么Mysql中Innodb的索引结构采取B+树? B树 B树的两个明显特点 树内的每个节点都存储数据 叶子节点之间无指针相邻 B+树 B+树的两个明显特 ...

  8. [转载]为什么mysql用的是B+树?

    什么是索引 在百度上查找索引的时候,很多回答会是:数据库就像是一本书,索引就像是他的目录,我们通过索引可以很快的定位到我们要找的数据. 这话说的通俗易懂,一点没错.但是如果要说的更确切一点,那么应该这 ...

  9. 面试 | MySQL InnoDB一棵B+树可以存放多少行数据?

    点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 作者 | 飘扬的红领巾 来源 | cnblogs.com ...

最新文章

  1. QT解决方案中新建动态链接库工程,且继承于QObject,解决无法生成moc_XXX.cpp文件的问题,解决工程之间的引用问题
  2. python3 执行系统命令
  3. 深入redis内部--实现字符串
  4. 【学习笔记】springboot的AutoConfigurationImportSelector 、@EnableAutoConfiguraion和@import解析
  5. TensorFlow:实战Google深度学习框架(五)图像识别与卷积神经网络
  6. EhCache复制:RMI与JGroups
  7. Linux加固(转)
  8. 最经典的权限设计同样也是最糟糕的权限设计,权限设计理念最关键第一步之间的PK...
  9. 数据结构实训——运动会分数统计
  10. 客户关系管理CRM系统源码PHP开源软件源码
  11. excel表格末尾添加一行_七夕表白,用Excel试试!抖音爆红,一晚点赞破百万
  12. 问题 D: 上帝视角
  13. php如何删除文件夹里的图片,php如何删除文件夹
  14. iOS 开发中的 Flux 架构模式
  15. Xutils中网络请求
  16. Cisco 第3章 基本网络连接和通信 测试考试答案
  17. CISP学习——信息安全概念
  18. JavaWeb书城项目(一)
  19. 一个简单答题系统的设计与实现(二)
  20. Maven私服Nexus3.x环境构建操作记录

热门文章

  1. 【逆向入门】 CrackMe160-005 分析思路
  2. .net core 使用阿波罗配置中心
  3. SEM竞价推广关键词托词方法与词性划分
  4. unity 模型加点击事件
  5. word图片被文字覆盖一部分的解决方法
  6. DAZ3D STUDIO渲染设置:基础和技巧
  7. 流体仿真中,六面体(Hex)网格的求解效率真的比四面体(Tet)高”很多”么?
  8. On SDK version 23 and up, your app data will be automatically backed up and restored on app install.
  9. 辐角原理判断点和多边形的关系
  10. python独立样本t检验 图_Python-两独立样本资料t检验