首先要了解磁盘预读机制,大致就是说,从磁盘读取数据的速度比从内存读取数据的速度要慢很多,所以要尽量减少磁盘I/O的操作,尽量增加内存I/O操作,既然这样,我们可以从磁盘提前把需要的数据拿到内存,这样需要这个数据的时候,它就可以直接从内存读取了。那么哪些数据是以后需要的数据呢,内存也是有限的,不能什么乱七八糟的数据都拿来啊。这出现了局部性原理:当一个数据被用到时,其附近的数据也通常会马上被使用。所以比如当你需要从磁盘获取某个数据时,它会同时把相邻的一段数据一起给拿出来放到内存,当再次想获取附近的数据时,直接从内存中读取就可以了,这样就极大地提升了效率。此外每一次磁盘I/O称之为一页(page)。

接下来看B+树的结构:有序数组链表+平衡多叉树

要想说明一个事物的优点就必须要有比较,要有参照物。

  相比于二叉树,多叉树一个节点能够存储更多的信息,磁盘进行一个I/O操作时能够获取到更多“周围的数据“,节点包含的数据尽量可以满足上面所说的一页数据。同时多叉树还可以降低树的深度,加快查找效率。

  相比于B树(有序数组+平衡多叉树),B+树多了链表的结构。B+树的数据是全部存在于叶子节点上的,叶子节点有指针指向下一个叶子节点,非叶子节点用来作为索引。比如当你用B树访问下一个节点数据时,你会怎么做?肯定是先访问当前节点的父节点,然后再访问下一个节点来获取数据,这就跟中序遍历有些类似了,但是如果使用B+树,叶子节具有指针,想访问下一个数据时直接通过指针就可以知道位置,是不是更方便了。

还在慢慢补充完善。。。。。

最新文章

  1. EF CodeFirst EntityTypeConfiguration 自关联映射配置
  2. Mac Mail PGP Setup 如何在苹果电脑上设置安全邮件 良好隐私密码法(英语:Pretty Good Privacy,缩写为PGP)
  3. rabbitmq安装
  4. Wordpress固定链接设置
  5. python eval
  6. C#中的DataSet、string、DataTable、对象转换成Json的实现代码
  7. Java之累加和
  8. android入门——UI(4)
  9. 获取SQL中某一列的类型及精度
  10. gulp inline
  11. 同时安装python2和python3
  12. setContentType与setCharacterEncoding的区别
  13. 基于ZigBee模块与51单片机之间的简化智能家居项目简介(学生版本)
  14. zoj 3601
  15. 软件工程(FZU2015) 赛季得分榜,第八回合
  16. 清北澡堂 Day2 下午 一些比较重要的数论知识整理
  17. 《Machine Learning Yearing》读书笔记
  18. Deepin 15.4 更改为 阿里云源
  19. js没有函数重载
  20. 图片人脸检测——OpenCV版(二)

热门文章

  1. GO-数据类型
  2. 理解 Android Binder 机制(一):驱动篇
  3. D. Maximum Distributed Tree 解析(思維、DFS、組合、貪心、DP)
  4. Luogu P4280 [AHOI2008]逆序对
  5. cmd中执行mvn help:system报错的解决办法
  6. 2018-12-7 CSAPP及C++
  7. Ethernaut靶场练习(0-5)
  8. 关于保存批量数据进入mysql
  9. python实现对于告警规则的判断思路
  10. Android Activity启动黑/白屏原因与解决方式