B树是一种多路自平衡搜索树,它类似普通的二叉树,但是B书允许每个节点有更多的子节点。B树示意图如下:

Paste_Image.png

B树的特点:

(1)所有键值分布在整个树中

(2)任何关键字出现且只出现在一个节点中

(3)搜索有可能在非叶子节点结束

(4)在关键字全集内做一次查找,性能逼近二分查找算法

B+树是B树的变体,也是一种多路平衡查找树,B+树的示意图为:

Paste_Image.png

从图中也可以看到,B+树与B树的不同在于:

(1)所有关键字存储在叶子节点,非叶子节点不存储真正的data

(2)为所有叶子节点增加了一个链指针

那么问题来了,为什么用B/B+树这种结构来实现索引呢??

答:红黑树等结构也可以用来实现索引,但是文件系统及数据库系统普遍使用B/B+树结构来实现索引。mysql是基于磁盘的数据库,索引是以索引文件的形式存在于磁盘中的,索引的查找过程就会涉及到磁盘IO(为什么涉及到磁盘IO请看文章后面的附加理解部分)消耗,磁盘IO的消耗相比较于内存IO的消耗要高好几个数量级,所以索引的组织结构要设计得在查找关键字时要尽量减少磁盘IO的次数。为什么要使用B/B+树,跟磁盘的存储原理有关。

局部性原理与磁盘预读

为了提升效率,要尽量减少磁盘IO的次数。实际过程中,磁盘并不是每次严格按需读取,而是每次都会预读。磁盘读取完需要的数据后,会按顺序再多读一部分数据到内存中,这样做的理论依据是计算机科学中注明的局部性原理:

链接:https://www.jianshu.com/p/0371c9569736

最新文章

  1. (转)对比MS Test与NUnit Test框架
  2. Spring回调方法DisposableBean接口
  3. tcp粘包问题(封包)
  4. MySQL数据库备份和还原的常用命令小结
  5. 用于软件包管理的21个Linux YUM命令
  6. IP隧道基础研究
  7. block 高级
  8. 打印机PCL漏洞原理分析
  9. 惠普 hpacucli工具使用
  10. UVa 10491 Cows and Cars (概率&广义三门问题 )
  11. HTML5之Canvas影片广场
  12. 7 Ways to earn money on programming(转)
  13. HTML静态分页(形如:首页,上一页,下一页,尾页)
  14. JDBC事务详解
  15. Ubuntu 18.04编译AOSP源码
  16. 快速数论变换(NTT)小结
  17. Messenger在MVVM模式中的应用
  18. 微星X470主板装机
  19. Scala 隐式(implicit)详解
  20. Linux 管理服务启动工具

热门文章

  1. MyBatis功能点一:二级缓存cache
  2. uniapp上传图片转base64码案例
  3. APK修改神器:插桩工具 DexInjector
  4. kali安装python2、python3以及对应的pip
  5. 【windows 操作系统】并发
  6. js根据ClassName来删除元素(有坑误入)
  7. 【用户状态】详细解读Oracle用户ACCOUNT_STATUS的九种状态
  8. python 2.x 版本 pip 的使用
  9. 网络爬虫深究-初识HTTP和https常识
  10. python 编辑器提示 do not use bare except