一、为什么要有B树?

学习任何一个东西我们都要知道为什么要有它,B树也一样,既然存储数据,我们为什么不用红黑树呢?

这个要从几个方面来说了:

(1)计算机有一个局部性原理,就是说,当一个数据被用到时,其附近的数据也通常会马上被使用。

(2)所以当你用红黑树的时候,你一次只能得到一个键值的信息,而用B树,可以得到最多M-1个键值的信息。这样来说B树当然更好了。

(3)另外一方面,同样的数据,红黑树的阶数更大,B树更短,这样查找的时候当然B树更具有优势了,效率也就越高。

二、B树

对于B树,我们首先要知道它的应用,B树大量应用在数据库和文件系统当中。

B树是对二叉查找树的改进。它的设计思想是,将相关数据尽量集中在一起,以便一次读取多个数据,减少硬盘操作次数。B树为系统最优化大块数据的读和写操作。B树算法减少定位记录时所经历的中间过程,从而加快存取速度。普遍运用在数据库和文件系统。

假定一个节点可以容纳100个值,那么3层的B树可以容纳100万个数据,如果换成二叉查找树,则需要20层!假定操作系统一次读取一个节点,并且根节点保留在内存中,那么B树在100万个数据中查找目标值,只需要读取两次硬盘。B 树可以看作是对2-3查找树的一种扩展,即他允许每个节点有M-1个子节点。

B树的结构:

1. 根节点至少有两个子节点 ;

2. 每个节点有M-1个key,并且以升序排列 ;

3. 位于M-1和M key的子节点的值位于M-1 和M key对应的Value之间 ;

4. 其它节点至少有M/2个子节点 ;

5. 所有叶子节点都在同一层 。

三、B+树

B+树是B-树的变体,也是一种多路搜索树,其定义基本与B树相同,除了:

1. 非叶子结点的子树指针与关键字个数相同;

2. 非叶子结点的子树指针P[i],指向关键字值属于[K[i], K[i+1])的子树(B-树是开区间);

3. 为所有叶子结点增加一个链指针;

4. 所有关键字都在叶子结点出现。

四、B树与B+树的对比

B和B+树的区别在于,B+树的非叶子结点只包含导航信息,不包含实际的值,所有的叶子结点和相连的节点使用链表相连,便于区间查找和遍历。

1、B树的优点

1. B树的每一个节点都包含key和value,因此经常访问的元素可能离根节点更近,因此访问也更迅速。

2、B+树的优点

1. 由于B+树在内部节点上不好含数据信息,因此在内存页中能够存放更多的key。 数据存放的更加紧密,具有更好的空间局部性。因此访问叶子几点上关联的数据也具有更好的缓存命中率;

2. B+树的叶子结点都是相链的,因此对整棵树的便利只需要一次线性遍历叶子结点即可。而且由于数据顺序排列并且相连,所以便于区间查找和搜索。而B树则需要进行每一层的递归遍历。相邻的元素可能在内存中不相邻,所以缓存命中性没有B+树好。

3、应用

B树和B+树经常被用于数据库中,作为MySQL数据库索引。索引(Index)是帮助MySQL高效获取数据的数据结构。为了查询更加高效,所以采用B树作为数据库的索引。

b树与b 树的区别 mysql,B树和B+树相关推荐

  1. 树模型与线性模型的区别 决策树分类和逻辑回归分类的区别 【总结】

    树模型与线性模型的区别在于: (一)树模型 ①树模型产生可视化的分类规则,可以通过图表表达简单直观,逐个特征进行处理,更加接近人的决策方式   ②产生的模型可以抽取规则易于理解,即解释性比线性模型强. ...

  2. B树和B+树分别是什么?区别在哪里?MySQL使用的是哪一种树?

    B树和B+树分别是什么?区别在哪里?MySQL使用的是哪一种树? B树,每个节点都存储key和data,所有节点组成这棵树,并且叶子节点指针为nul,叶子结点不包含任何关键字信息. B+树,所有的叶子 ...

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

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

  4. b树与b+树的区别_Linux内核-数据结构系列(B树、B-树、B+树)的区别

    一.B树 (二叉搜索树) B 树可以看作是对2-3查找树的一种扩展,即他允许每个节点有M-1个子节点. 根节点至少有两个子节点 每个节点有M-1个key,并且以升序排列 位于M-1和M key的子节点 ...

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

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

  6. mysql为什么要用b+树

    mysql为什么要用b+树 先看原因: 1.B+树减少了IO次数,效率更高 (这里这么理解:-----就是减少了磁盘的访问次数,毕竟内存速度要比磁盘快的多) 2.B+树查询跟稳定,因为所有数据放在叶子 ...

  7. 二叉树、B树(B-树)、B+树、B*树详解,以及为什么MySQL选择B+树做索引

    温故而知新,可以为师矣.看到一篇介绍B数和B减树的文章,这里记录一下. 1. 简要 众所周知,MySQL的索引使用了B+树的数据结构.那么为什么不用B树呢? 先看一下B树和B+树的区别. 2. 二叉树 ...

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

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

  9. MySQL索引底层:B+树详解

    前言 当我们发现SQL执行很慢的时候,自然而然想到的就是加索引.对于范围查询,索引的底层结构就是B+树.今天我们一起来学习一下B+树哈~ 树简介.树种类 B-树.B+树简介 B+树插入 B+树查找 B ...

最新文章

  1. VS2010非永久性配置和永久配置Opencv
  2. NumPy学习笔记 一
  3. 轻量级锁的加锁和解锁逻辑-自旋锁
  4. Apache Spark 2.0: 机器学习模型持久化
  5. maven生命周期入门
  6. MVC Area领域处理以及T4MVC的使用
  7. 优思学院|朱兰,质量改进的先驱者
  8. 自己编写DLL文件——注册——VB工程引用——标准EXE调用(含例子)
  9. php返回值乱码,php中文返回乱码怎么办
  10. C++写一个CSGO开箱模拟器
  11. OSGi 框架的组件运行机制
  12. 【ChatGPT初体验与Android的集成使用】
  13. Android Studio2.0 教程从入门到精通MAC版 - 安装篇
  14. 布道微服务_16服务端故障的紧急避险措施
  15. ERP中的MPS与APS间的关系
  16. java线程安全的list_线程安全的list该如何实现?
  17. iPhone4 GSM Model A1332升级IOS7.1.2失败后降级IOS5.1.1成功
  18. mot数据集_【多目标跟踪】搞不懂MOT数据集,会跑代码有啥用!
  19. 【华人学者风采】俞栋 腾讯
  20. 简单flash光晕效果的制作

热门文章

  1. 创建一个分布式网络爬虫的故事
  2. 织梦后台登录出现500错误解决方案
  3. 对List中的对象的模糊查询
  4. [usOJ5529]小奇探险
  5. 计算机学院特色迎新标语,有创意的迎新,计算机学院用代码写迎新条幅,学弟学妹表示一脸懵...
  6. keil写文字怎么会乱码_刚刚!2020福建高考作文题揭晓!你会怎么写?
  7. Stata: 交叉项\交乘项该这么分析!
  8. 嵌入式系统C语言编程基础
  9. 设配器模式不止是补救,有时更像是一个创造者
  10. ReactOS实践(一) ReactOS 源代码编译以及VMWare下运行