b树与b 树的区别 mysql,B树和B+树
一、为什么要有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+树相关推荐
- 树模型与线性模型的区别 决策树分类和逻辑回归分类的区别 【总结】
树模型与线性模型的区别在于: (一)树模型 ①树模型产生可视化的分类规则,可以通过图表表达简单直观,逐个特征进行处理,更加接近人的决策方式 ②产生的模型可以抽取规则易于理解,即解释性比线性模型强. ...
- B树和B+树分别是什么?区别在哪里?MySQL使用的是哪一种树?
B树和B+树分别是什么?区别在哪里?MySQL使用的是哪一种树? B树,每个节点都存储key和data,所有节点组成这棵树,并且叶子节点指针为nul,叶子结点不包含任何关键字信息. B+树,所有的叶子 ...
- 为什么MySQL数据库要用B+树存储索引?
小史是一个应届生,虽然学的是电子专业,但是自己业余时间看了很多互联网与编程方面的书,一心想进BAT互联网公司. 话说两个多月前,小史通过了A厂的一面,两个多月后的今天,小史终于等到了A厂的二面. 简单 ...
- b树与b+树的区别_Linux内核-数据结构系列(B树、B-树、B+树)的区别
一.B树 (二叉搜索树) B 树可以看作是对2-3查找树的一种扩展,即他允许每个节点有M-1个子节点. 根节点至少有两个子节点 每个节点有M-1个key,并且以升序排列 位于M-1和M key的子节点 ...
- 16kb等于多少b_面试官:MySQL索引为何选择B+树?
声明 本文所述的各种数据结构(二叉树等),均不考虑重复值的情况,本文简述各种数据结构的区别仅仅只是为了理解MySQL索引的需要而做的铺垫. 什么是索引 提起索引,大家都知道,建立索引可以让数据库查询更 ...
- mysql为什么要用b+树
mysql为什么要用b+树 先看原因: 1.B+树减少了IO次数,效率更高 (这里这么理解:-----就是减少了磁盘的访问次数,毕竟内存速度要比磁盘快的多) 2.B+树查询跟稳定,因为所有数据放在叶子 ...
- 二叉树、B树(B-树)、B+树、B*树详解,以及为什么MySQL选择B+树做索引
温故而知新,可以为师矣.看到一篇介绍B数和B减树的文章,这里记录一下. 1. 简要 众所周知,MySQL的索引使用了B+树的数据结构.那么为什么不用B树呢? 先看一下B树和B+树的区别. 2. 二叉树 ...
- b-tree和b+tree以及mysql为什么使用了b+树
最近写了一些mysql的博客,但是对于索引的数据结构一致没有深入的描述过.所以就有了这一篇文章. b tree和b-tree就是一个玩意 应该很多人都看到过b树和b-树,还有b+树,不了解的小伙伴还以 ...
- MySQL索引底层:B+树详解
前言 当我们发现SQL执行很慢的时候,自然而然想到的就是加索引.对于范围查询,索引的底层结构就是B+树.今天我们一起来学习一下B+树哈~ 树简介.树种类 B-树.B+树简介 B+树插入 B+树查找 B ...
最新文章
- VS2010非永久性配置和永久配置Opencv
- NumPy学习笔记 一
- 轻量级锁的加锁和解锁逻辑-自旋锁
- Apache Spark 2.0: 机器学习模型持久化
- maven生命周期入门
- MVC Area领域处理以及T4MVC的使用
- 优思学院|朱兰,质量改进的先驱者
- 自己编写DLL文件——注册——VB工程引用——标准EXE调用(含例子)
- php返回值乱码,php中文返回乱码怎么办
- C++写一个CSGO开箱模拟器
- OSGi 框架的组件运行机制
- 【ChatGPT初体验与Android的集成使用】
- Android Studio2.0 教程从入门到精通MAC版 - 安装篇
- 布道微服务_16服务端故障的紧急避险措施
- ERP中的MPS与APS间的关系
- java线程安全的list_线程安全的list该如何实现?
- iPhone4 GSM Model A1332升级IOS7.1.2失败后降级IOS5.1.1成功
- mot数据集_【多目标跟踪】搞不懂MOT数据集,会跑代码有啥用!
- 【华人学者风采】俞栋 腾讯
- 简单flash光晕效果的制作
热门文章
- 创建一个分布式网络爬虫的故事
- 织梦后台登录出现500错误解决方案
- 对List中的对象的模糊查询
- [usOJ5529]小奇探险
- 计算机学院特色迎新标语,有创意的迎新,计算机学院用代码写迎新条幅,学弟学妹表示一脸懵...
- keil写文字怎么会乱码_刚刚!2020福建高考作文题揭晓!你会怎么写?
- Stata: 交叉项\交乘项该这么分析!
- 嵌入式系统C语言编程基础
- 设配器模式不止是补救,有时更像是一个创造者
- ReactOS实践(一) ReactOS 源代码编译以及VMWare下运行