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

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

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

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

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

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

B+树作为数据库索引有什么优势?I/O方面?的更多相关文章

  1. B树在数据库索引中的应用剖析

    引言 关于数据库索引,google一个oracle index,mysql index总 有大量的结果,其中很多的使用方法推荐,**索引之n条经典建议云云.笔者认为,较之借鉴,在搞清楚了自己的需求的基 ...

  2. 程序员的算法课(16)-B+树在数据库索引中的作用

    版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/m0_37609579/article/de ...

  3. 为什么选择B+树作为数据库索引结构?

    背景 首先,来谈谈B树.为什么要使用B树?我们需要明白以下两个事实: [事实1] 不同容量的存储器,访问速度差异悬殊.以磁盘和内存为例,访问磁盘的时间大概是ms级的,访问内存的时间大概是ns级的.有个 ...

  4. B+树及数据库索引的应用

    B树 每个节点都存储key和data,所有节点组成这棵树,并且叶子节点指针为null. B+树 只有叶子节点存储data,叶子节点包含了这棵树的所有键值,叶子节点不存储指针. 后来,在B+树上增加了顺 ...

  5. 【转】B-树和B+树的应用:数据搜索和数据库索引

    B-树 1 .B-树定义 B-树是一种平衡的多路查找树,它在文件系统中很有用. 定义:一棵m 阶的B-树,或者为空树,或为满足下列特性的m 叉树: ⑴树中每个结点至多有m 棵子树: ⑵若根结点不是叶子 ...

  6. 数据结构 B-树和B+树的应用:数据搜索和数据库索引

    B-树 1 .B-树定义 B-树是一种平衡的多路查找树,它在文件系统中很有用. 定义:一棵m 阶的B-树,或者为空树,或为满足下列特性的m 叉树:⑴树中每个结点至多有m 棵子树:⑵若根结点不是叶子结点 ...

  7. B-树和B+树的应用:数据搜索和数据库索引

    B-树和B+树的应用:数据搜索和数据库索引  B-树 1 .B-树定义 B-树是一种平衡的多路查找树,它在文件系统中很有用. 定义:一棵m 阶的B-树,或者为空树,或为满足下列特性的m 叉树:⑴树中每 ...

  8. (转)B-树和B+树的应用:数据搜索和数据库索引

    B-树 1 .B-树定义 B-树是一种平衡的多路查找树,它在文件系统中很有用. 定义:一棵m 阶的B-树,或者为空树,或为满足下列特性的m 叉树: ⑴树中每个结点至多有m 棵子树: ⑵若根结点不是叶子 ...

  9. 为什么MySQL数据库索引选择使用B+树?

    在进一步分析为什么MySQL数据库索引选择使用B+树之前,我相信很多小伙伴对数据结构中的树还是有些许模糊的,因此我们由浅入深一步步探讨树的演进过程,在一步步引出B树以及为什么MySQL数据库索引选择使 ...

随机推荐

  1. C# 微支付 JSAPI支付方式 V3.3.6版本

    <script type="text/javascript">//结算 (订单号) function PayClearing(num) { $.ajax({ type: ...

  2. Java异常ClassCastException

    在说ClassCastException之前,先介绍下引用类型转换: 引用类型转换分为向上转型和向下转型两种: 向上转型:多态本身是子类类型向父类类型向上转换的过程,这个过程是默认的:当父类引用指向一 ...

  3. 异常java.lang.IllegalArgumentException: An invalid character [32] was present in the Cookie value

    通过HttpServletResponse的addCookie(Cookie cookie)向客户端写cookie信息,这里使用的tomcat版本是8.5.31,出现如下报错: java.lang.I ...

  4. Vue3实战系列:Vue3.0 + Vant3.0 搭建种子项目

    最近在用 Vue3 写一个开源的商城项目,开源后让大家也可以用现成的 Vue3 大型商城项目源码来练练手,目前处于开发阶段,过程中用到了 Vant3.0,于是就整理了这篇文章来讲一下如何使用 Vue3 ...

  5. Bitmap缩放(三)

    质量压缩 public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle ...

  6. 对PatchGAN的感知域(receptive_field)理解

    for basic discriminator of GANs 判别器用于感知生成器产生的合成图片和ground-truth的差异,并旨在实现区分出fake or real: 同时,判别器的输出也是经 ...

  7. Spring框架中获取连接池常用的四种方式

    1:DBCP数据源 DBCP类包位于 /lib/jakarta-commons/commons-dbcp.jar,DBCP是一个依赖Jakarta commons-pool对象池机制的数据库连接池,所 ...

  8. spring强行注入和引用的例子

    前提: public class DataProviderManagerImpl implements ApplicationContextAware @Override public void se ...

  9. 修改Anaconda中Jupyter Notebook默认工作路径

    修改Anaconda中Jupyter Notebook默认工作路径 1.打开 Anaconda Prompt 2.输入命令 jupyter notebook --generate-config 这个命 ...

  10. 微信小程序新闻网站列表页

    在app.json中可以设置所有文件的头部导航颜色 (是window属性的子属性) 在具体页面可以单独设置该页面的导航颜色 (直接写该属性,不需要写window属性) 查看官方文档,可以看到好多全局属 ...