B+树作为数据库索引有什么优势?I/O方面?
2024-10-18 17:34:25
首先要了解磁盘预读机制,大致就是说,从磁盘读取数据的速度比从内存读取数据的速度要慢很多,所以要尽量减少磁盘I/O的操作,尽量增加内存I/O操作,既然这样,我们可以从磁盘提前把需要的数据拿到内存,这样需要这个数据的时候,它就可以直接从内存读取了。那么哪些数据是以后需要的数据呢,内存也是有限的,不能什么乱七八糟的数据都拿来啊。这出现了局部性原理:当一个数据被用到时,其附近的数据也通常会马上被使用。所以比如当你需要从磁盘获取某个数据时,它会同时把相邻的一段数据一起给拿出来放到内存,当再次想获取附近的数据时,直接从内存中读取就可以了,这样就极大地提升了效率。此外每一次磁盘I/O称之为一页(page)。
接下来看B+树的结构:有序数组链表+平衡多叉树
要想说明一个事物的优点就必须要有比较,要有参照物。
相比于二叉树,多叉树一个节点能够存储更多的信息,磁盘进行一个I/O操作时能够获取到更多“周围的数据“,节点包含的数据尽量可以满足上面所说的一页数据。同时多叉树还可以降低树的深度,加快查找效率。
相比于B树(有序数组+平衡多叉树),B+树多了链表的结构。B+树的数据是全部存在于叶子节点上的,叶子节点有指针指向下一个叶子节点,非叶子节点用来作为索引。比如当你用B树访问下一个节点数据时,你会怎么做?肯定是先访问当前节点的父节点,然后再访问下一个节点来获取数据,这就跟中序遍历有些类似了,但是如果使用B+树,叶子节具有指针,想访问下一个数据时直接通过指针就可以知道位置,是不是更方便了。
还在慢慢补充完善。。。。。
最新文章
- EF CodeFirst EntityTypeConfiguration 自关联映射配置
- Mac Mail PGP Setup 如何在苹果电脑上设置安全邮件 良好隐私密码法(英语:Pretty Good Privacy,缩写为PGP)
- rabbitmq安装
- Wordpress固定链接设置
- python eval
- C#中的DataSet、string、DataTable、对象转换成Json的实现代码
- Java之累加和
- android入门——UI(4)
- 获取SQL中某一列的类型及精度
- gulp inline
- 同时安装python2和python3
- setContentType与setCharacterEncoding的区别
- 基于ZigBee模块与51单片机之间的简化智能家居项目简介(学生版本)
- zoj 3601
- 软件工程(FZU2015) 赛季得分榜,第八回合
- 清北澡堂 Day2 下午 一些比较重要的数论知识整理
- 《Machine Learning Yearing》读书笔记
- Deepin 15.4 更改为 阿里云源
- js没有函数重载
- 图片人脸检测——OpenCV版(二)