mysql的 b 树和哈希区别_Mysql InnoDB B+树索引和哈希索引的区别? MongoDB 为何使用B-树?...

B-树和B+树最重要的一个区别就是B+树只有叶节点存放数据,其他节点用来索引,而B-树是每一个索引节点都会有Data域。html

B+树

B+树是为磁盘及其余存储辅助设备而设计一种平衡查找树(不是二叉树)。B+树中,全部记录的节点按大小顺序存放在同一层的叶节点中,各叶节点用指针进行链接。程序员

数据库中B+树索引分为汇集索引(clustered index)和非汇集索引(secondary index).这两种索引的共同点是内部都是B+树,高度都是平衡的,叶节点存放着全部数据。不一样点是叶节点是否存放着一整行数据。web

B+树有以下特色:面试

B+树每一个节点能够包含更多的节点,这样作有两个缘由,一个是下降树的高度。另一个是将数据范围变为多个区间,区间越多,数据检索越快。

每一个节点再也不只是存储一个key了,能够存储多个key。

非叶子节点存储key,叶子节点存储key和数据。

叶子节点两两指针相互连接,顺序查询性能更高。

通俗的讲

- B+树的非叶子节点只是存储key,占用空间很是小,所以每一层的节点能索引到的数据范围更加的广。换句话说,每次IO操做能够搜索更多的数据。

- 叶子节点两两相连,符合磁盘的预读特性。好比叶子节点存储50和55,它有个指针指向了60和62这个叶子节点,那么当咱们从磁盘读取50和55对应的数据的时候,因为磁盘的预读特性,会顺便把60和62对应的数据读取出来。这个时候属于顺序读取,而不是磁盘寻道了,加快了速度。

- 支持范围查询,并且部分范围查询很是高效,每一个节点能索引的范围更大更精确,也意味着 B+树单次磁盘IO的信息量大于B-树,I/O效率更高。算法

缘由是数据都是存储在叶子节点这一层,而且有指针指向其余叶子节点,这样范围查询只须要遍历叶子节点这一层,无需整棵树遍历。sql

局部性原理与磁盘预读

因为磁盘的存取速度与内存之间鸿沟,为了提升效率,要尽可能减小磁盘I/O.磁盘每每不是严格按需读取,而是每次都会预读,磁盘读取完须要的数据,会顺序向后读必定长度的数据放入内存。而这样作的理论依据是计算机科学中著名的局部性原理:mongodb

当一个数据被用到时,其附近的数据也一般会立刻被使用,程序运行期间所须要的数据一般比较集中数据库

B-树

B-树,这里的 B 表示 balance( 平衡的意思),B-树是一种多路自平衡的搜索树

它相似普通的平衡二叉树,不一样的一点是B-树容许每一个节点有更多的子节点。segmentfault

B-树有以下特色微信

全部键值分布在整颗树中。

任何一个关键字出现且只出如今一个结点中。

搜索有可能在非叶子结点结束。

在关键字全集内作一次查找,性能逼近二分查找。

B-树和B+树的区别

B+树内节点不存储数据,全部数据存储在叶节点致使查询时间复杂度固定为 log n。

B-树查询时间复杂度不固定,与 key 在树中的位置有关,最好为O(1)。

B+树叶节点两两相连可大大增长区间访问性,可以使用在范围查询等。

B-树每一个节点 key 和 data 在一块儿,则没法区间查找。

B+树更适合外部存储(存储磁盘数据)。因为内节点无 data 域,每一个节点能索引的范围更大更精确。

MongoDB 为何使用B-树?

B+树内节点不存储数据,全部 data 存储在叶节点致使查询时间复杂度固定为 log n。而B-树查询时间复杂度不固定,与 key 在树中的位置有关,最好为O(1)

咱们说过,尽量少的磁盘 IO 是提升性能的有效手段。MongoDB 是聚合型数据库,而 B-树刚好 key 和 data 域聚合在一块儿。

至于MongoDB为何使用B-树而不是B+树,能够从它的设计角度来考虑,它并非传统的关系性数据库,而是以Json格式做为存储的nosql,目的就是高性能,高可用,易扩展。首先它摆脱了关系模型,上面所述的优势2需求就没那么强烈了,其次Mysql因为使用B+树,数据都在叶节点上,每次查询都须要访问到叶节点,而MongoDB使用B-树,全部节点都有Data域,只要找到指定索引就能够进行访问,无疑单次查询平均快于Mysql。

哈希索引

简单地说,哈希索引就是采用必定的哈希算法,把键值换算成新的哈希值,检索时不须要相似B+树那样从根节点到叶子节点逐级查找,只需一次哈希算法便可马上定位到相应的位置,速度很是快。

B+树索引和哈希索引的区别

若是是等值查询,那么哈希索引明显有绝对优点,由于只须要通过一次算法便可找到相应的键值;固然了,这个前提是,键值都是惟一的。若是键值不是惟一的,就须要先找到该键所在位置,而后再根据链表日后扫描,直到找到相应的数据。

若是是范围查询检索,这时候哈希索引就毫无用武之地了,由于原先是有序的键值,通过哈希算法后,有可能变成不连续的了,就没办法再利用索引完成范围查询检索。

同理,哈希索引也没办法利用索引完成排序,以及like ‘xxx%’ 这样的部分模糊查询(这种部分模糊查询,其实本质上也是范围查询)。

哈希索引也不支持多列联合索引的最左匹配规则。

B+树索引的关键字检索效率比较平均,不像B树那样波动幅度大,在有大量重复键值状况下,哈希索引的效率也是极低的,由于存在所谓的哈希碰撞问题。

备注:以上内容均摘抄自网络,并不是原创,仅供我的学习交流使用,望各路大牛,发现不对的地方,不吝赐教,留言便可。

参考

推荐阅读

关注微信公众号福利

关注微信公众号「搜云库」获取最新文章

【福利】公众号后台回复 “进群”

【福利】邀请您进微信 “技术分享群”

【福利】群里有不少技术大佬,免费提问,互相学习

d7c5551f2b2645f6a4183725.html

基于STM32F407的定时器以及定时器中断的实现 阅读详情

相关推荐

保姆级CVE-2018-17066漏洞复现 DLink命令注入漏洞(更新完结)

之后按照之前复现的方式一样 我们丢到kali中执行binwalk解析。之后为了模拟 可以在kali里安装qemu-mipsel。在bin目录下可以尝试将goahead的环境搭配好。固件官网可以进行下载。

weixin_51339377的博客 874

B树、B-树、B+树、B*树介绍

B树、B-树、B+树、B*树之间的关系B树B+树B*树 B树 B-树就是B树(可能有部分人会习惯上把B-树读为B减树,其实并不存在B减树,只是读法上的不同而已),B就是balanced,平衡的意思。B-树就是指的B树,特此说明一下。 先介绍一下二叉搜索树。 顾名思义,二叉搜索树,即指最多拥有两个叉,这里的叉即为所有非叶子结点的儿子(Lift和Right); 所有的结点存储一个关键字; 非叶子结点...

A_zhangq的博客 2万+

vtk相机_分别用 VTK 体绘制和面绘制来实现医学图像三维重建;

序言,VTK介绍:VTK 全称为 The Visualization Toolkit (可视化工具),是一个开源、跨平台、自由获取、支持并行计算的图形应用函数;拥有3D 渲染的最新工具、提供3D交互模式以及2D绘图等。VTK 包含一个C++类库,目前提供了众多语言接口,例如 Java、Python、TCL;在三维函数库OpenGL 的基础上采用面向对象设计方法发展起来图形学基本概念和数据...

weixin_39665302的博客 681

二叉树、B树、B+树、红黑树B树B树与二叉树的区别

B+树的内部节点并没有指向关键字具体信息的指针,因此其内部节点相对B树更小,如果把所有同一内部节点的关键字存放在同一盘块中,那么盘块所能容纳的关键字数量也越多,一次性读入内存的需要查找的关键字也就越多,相对IO读写次数就降低了。,只需要扫一遍叶子结点即可,但是B树因为其分支结点同样存储着数据,我们要找到具体的数据,需要进行一次中序遍历按序来扫,所以B+树更加适合在区间查询的情况,所以通常B+树用于数据库索引。B+关键字集合分布在在叶子节点中,非叶子节点只是关键字叶子节点的索引。红黑树的插入删除效率更高。

2431

centos7下安装gcc-10.3.0

生成多个系统版本的代码,如果你的操作系统是32位,默认就已经设置为 disable,这时gcc仅能生成32位的可执行程序;这里只开启了c,c++ 和fortran,因为支持的语言越多,就需要安装越多的相应静态与动态库,还有五花八门的依赖库,这会让管理变得困难,体积也会变得庞大。启用posix标准的线程支持,这个设置取决于宿主或目标操作系统的类型,其它可用值有:aix,dec,solaris,win32等,如果你是其它的类UNIX系统,就需要设置相应的值。指定安装路径,这里没有指定,就直接放到文件夹里就好。

lxystar2003的博客 1184

《点云处理算法》——GROR配准

GROR点云配准

阁楼 1308

B+和二叉树的区别

二叉树的每个结点至多有2个结点或者只有1个左结点 B树1。根结点至少有2个结点,2。除根结点和失败结点外的所有结点至少有m/2上取整个子结点,3。所有的失败结点均处在同一层上。左结点小于右结点。 B+树是B-树的...

cuizeyu8189的博客 2832

手把手教你设计2bit反射型超表面:从单patch扫参到pin管配置全流程

本文提供了一份2bit反射型超表面设计的完整工程实践指南。从单贴片谐振器的参数化扫描与“270度法则”应用,到PIN二极管等效电路模型的获取与集成,再到利用参数化扫描高效仿真四种工作状态,手把手指导读者完成从单元设计到阵列布局、偏置线集成及加工考量的全流程,旨在帮助射频工程师将概念转化为可加工测试的实体模型。

java5的博客 1011

数据结构 —— 二叉搜索树、B树、B+树、B*树的对比

文章目录1、二叉搜索树2、B树(B-树)3、B+树4、B*树5、小结 1、二叉搜索树 二叉搜索树: 所有非叶子结点至多拥有两个儿子(Left和Right); 所有结点存储一个关键字; 非叶子结点的左指针指向小于其关键字的子树,右指针指向大于其关键字的子树; 如: 二叉搜索树的搜索,从根结点开始, 如果查询的关键字与结点的关键字相等,那么就命中;否则,如果查询关键字比结点关键字小,就进入左儿子...

猎人在吃肉 1556

SAP PCE 到底有没有 AI 能力:从标准功能、Joule、ABAP 扩展到项目落地的完整解读

摘要:SAP S/4HANA Cloud Private Edition(PCE)已深度集成AI能力,主要体现在三个方面:1)标准业务流程中的AI辅助功能(如财务分录生成、维修单据处理);2)通过Joule提供的自然语言交互入口,支持业务导航和部分事务处理;3)开发者可通过ABAP AI SDK与BTP平台集成实现扩展。PCE不是独立AI平台,企业级自定义AI需结合SAP BTP实现。AI能力已深度融入财务、制造等业务场景,但关键业务仍需人工审核。(149字)

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 317

6-2 GPU GART 绑定机制与 TLB 失效

本文详细解析了AMD GPU的GART(Graphics Address Remapping Table)绑定机制实现。主要内容包括: 绑定流程:从ttm_tt_bind()到硬件PTE更新的完整调用链,重点分析amdgpu_gart_bind()函数实现。 关键函数: amdgpu_gart_bind():执行安全检查、记录映射关系、更新页表等操作 amdgpu_gart_map():将CPU页映射为多个GPU页并填充PTE amdgpu_gmc_set_pte_pde():处理硬件特定的PTE格式 内存

图形/计算GPU的驱动与虚拟化技术分享园地 2618

B树与二叉树

1、二叉树的问题分析 二叉树的操作效率较高,但是也存在问题, 请看下面的二叉树 二叉树需要加载到内存的,如果二叉树的节点少,没有什么问题,但是如果二叉树的节点很多(比如1亿), 就存在如下问题: 问题1:在构建二叉树时,需要多次进行i/o操作(海量数据存在数据库或文件中),节点海量,构建二叉树时,速度有影响 问题2:节点海量,也会造成二叉树的高度很大,会降低操作速度. 2、多叉树 在二叉树中,每个节点有数据项,最多有两个子节点。如果允许每个节点可以有更多的数据项和更多的子节点,就是多叉树(multiway

舒克日记的博客 1959

量子编程专业权威教程(十四):Shor 算法

本文系统阐述了Shor算法的原理与实现,重点解析了将大数分解问题转化为周期寻找问题的数论基础,以及模幂运算量子电路的设计方法。通过以N=15为例的完整算法流程演示,展示了量子计算在因数分解问题上的指数级优势。文章详细拆解了受控幺正操作构建、量子傅里叶变换应用等关键技术环节,并提供了可复现的Qiskit代码实现。同时指出了当前量子硬件在比特数、相干时间和错误率等方面面临的工程挑战,这些限制使得分解大整数仍需长期技术突破。该研究为理解量子计算优势提供了典型范例,对后量子密码学发展具有重要启示意义。

分享知识,拥抱变化 785

Mysql InnoDB B+树索引和哈希索引的区别? MongoDB 为什么使用B-树?

B-树和B+树最重要的一个区别就是B+树只有叶节点存放数据,其余节点用来索引,而B-树是每个索引节点都会有Data域。 B+树 B+树是为磁盘及其他存储辅助设备而设计一种平衡查找树(不是二叉树)。B+树中,所有记录的节点按大小顺序存放在同一层的叶节点中,各叶节点用指针进行连接。 数据库中B+树索引分为聚集索引(clustered index)和非聚集索引(secondary index).这...

架构师专栏 2690

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

mysql索引二叉树和哈希_Mysql InnoDB B+树索引和哈希索引的区别? MongoDB 为什么使用B-树?...

B-树和B+树最重要的一个区别就是B+树只有叶节点存放数据,其余节点用来索引,而B-树是每个索引节点都会有Data域。B+树B+树是为磁盘及其他存储辅助设备而设计一种平衡查找树(不是二叉树)。B+树中,所有记录的节点按大小顺序存放在同一层的叶节点中,各叶节点用指针进行连接。数据库中B+树索引分为聚集索引(clustered index)和非聚集索引(secondary index).这两种索引的共...

weixin_34005090的博客 170

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

Mysql InnoDB B+树索引和哈希索引的区别?

B-树和B+树最重要的一个区别就是B+树只有叶节点存放数据,其余节点用来索引,而B-树是每个索引节点都会有Data域。 B+树 B+树是为磁盘及其他存储辅助设备而设计一种平衡查找树(不是二叉树)。B+树中,所有记录的节点按大小顺序存放在同一层的叶节点中,各叶节点用指针进行连接。 数据库中B+树索引分为聚集索引(clustered index)和非聚集索引(secondary index).这两种索引的共同点是内部都是B+树,高度都是平衡的,叶节点存放着所有数据。不同点是叶节点是否存放着一整行数据。 B+树有

qq_42828912的博客 281

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

mongodb索引和mysql索引_Mysql InnoDB B+树索引和哈希索引的区别? MongoDB 为什么使用B-树...

B-树和B+树最重要的一个区别就是B+树只有叶节点存放数据,其余节点用来索引,而B-树是每个索引节点都会有Data域。B+树B+树是为磁盘及其他存储辅助设备而设计一种平衡查找树(不是二叉树)。B+树中,所有记录的节点按大小顺序存放在同一层的叶节点中,各叶节点用指针进行连接。数据库中B+树索引分为聚集索引(clustered index)和非聚集索引(secondary index).这两种索引的共...

weixin_34560676的博客 344

MySQL问答200

本文涵盖MySQL全栈面试核心内容,包括:基础概念(关系型数据库特性、体系结构);存储引擎对比(InnoDB/MyISAM);索引原B+树、聚簇索引)与优化策略;事务ACID与隔离级别实现;锁机制(行锁、间隙锁)与MVCC原理;日志系统(redo/undo/binlog);SQL优化与执行计划分析;高可用方案(主从复制、分库分表);InnoDB底层机制(Buffer Pool、Checkpoint);以及MySQL 8.0新特性。

weixin_72753562的博客 824

java二叉树平衡二叉树B树B+树的区别

二叉树(普通二叉树)   1. 所有节点最多拥有两个子节点,即度不大于2   2. 左子树的键值小于根的键值,右子树的键值大于根的键值 平衡二叉树(AVL树) 使用avl算法为了减少二叉查找树层次,提高查找速度,可以通过旋转重新达到平衡。也称自平衡二叉树   1)它的左右两个子树的高度差(平衡因子)的绝对值不超过1,   2)并且左右两个子树都是一棵平衡二叉树,   3)同时,平衡二叉树必定是二叉搜索树

fms5201314的博客 788

平衡二叉树、B树、B+树、B*树

1、平衡二叉树 概念 平衡二叉树是基于二分法的策略提高数据的查找速度的二叉树的数据结构; 特点: 平衡二叉树是采用二分法思维把数据按规则组装成一个树形结构的数据,用这个树形结构的数据减少无关数据的检索,大大的提升了数据检索的速度;平衡二叉树的数据结构组装过程有以下规则: (1)非叶子节点只能允许最多两个子节点存在。 (2)每一个非叶子节点数据分布规则为左边的子节点小当前节点的值,右边的子节点大于当前节点的值(这里值是基于自己的算法规则而定的,比如hash值); 平衡树的层级结构:因为平衡二叉树查询性能和树

weixin_48938528的博客 605

B树、红黑树、B+树和平衡二叉树(如AVL树)的区别

B树、红黑树、B+树和平衡二叉树(如AVL树)的区别及优缺点的总结:TreeMapstd::map[m/2, m]MyISAMInnoDB。

yinjinshui的博客 888

二叉树、平衡二叉树、B树与B+树的区别与应用

在计算机科学中,树结构是一种非常重要的数据结构,广泛应用于数据库、文件系统、编译器等领域。二叉树、平衡二叉树、B树和B+树是树结构中的经典代表,它们各自具有独特的特点和适用场景。本文将深入探讨这四种树结构的定义、特点、区别以及应用场景,帮助读者更好地理解它们的核心概念。

李长渊的博客 1796

平衡二叉树、B、B+树的对比

对于1-8数据,平衡二叉树、B树、B+树存储方式 对比: 1)b,b+相对于平衡二叉树,节点可以存储多个元素,因此整体可以存储较多的数据,并且树的高度也会矮,可以减少磁盘IO,提高检索效率 2)B+树叶子节点包含全部数据,切实有序的链表,对于范围查找非常容易(这就是比hash表的优点) 局部性原理: root@ubuntu-128:/var/lib/mysql...

liuhehe的博客 621

二叉树、平衡二叉树、红黑树、BTree、B+Tree的区别

二叉树、AVL树、B-true、B+True

github_39019743的博客 1313
上一篇: mysql 授权 dump_mysqldump数据导出问题和客户端授权后连接失败问题
下一篇: python拍照搜题_中国大学慕课mooc用Python玩转数据期末考试搜题公众号答案
王辉猛
博客等级 码龄8年 24粉丝 78原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值