为什么有关MongoDB采用B树索引,以及Mysql B+树做索引

作者&投稿:除径 (若有异议请与网页底部的电邮联系)
为什么有关MongoDB采用B树索引,以及Mysql B+树做索引~

先从数据结构的角度来答。
题主应该知道B-树和B+树最重要的一个区别就是B+树只有叶节点存放数据,其余节点用来索引,而B-树是每个索引节点都会有Data域。
这就决定了B+树更适合用来存储外部数据,也就是所谓的磁盘数据。
从Mysql(Inoodb)的角度来看,B+树是用来充当索引的,一般来说索引非常大,尤其是关系性数据库这种数据量大的索引能达到亿级别,所以为了减少内存的占用,索引也会被存储在磁盘上。
那么Mysql如何衡量查询效率呢?磁盘IO次数,B-树(B类树)的特定就是每层节点数目非常多,层数很少,目的就是为了就少磁盘IO次数,当查询数据的时候,最好的情况就是很快找到目标索引,然后读取数据,使用B+树就能很好的完成这个目的,但是B-树的每个节点都有data域(指针),这无疑增大了节点大小,说白了增加了磁盘IO次数(磁盘IO一次读出的数据量大小是固定的,单个数据变大,每次读出的就少,IO次数增多,一次IO多耗时啊!),而B+树除了叶子节点其它节点并不存储数据,节点小,磁盘IO次数就少。这是优点之一。
另一个优点是什么,B+树所有的Data域在叶子节点,一般来说都会进行一个优化,就是将所有的叶子节点用指针串起来。这样遍历叶子节点就能获得全部数据,这样就能进行区间访问啦。

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

总体来说,Mysql选用B+树和MongoDB选用B-树还是以自己的需求来选择的。

mysql索引的数据结构,为什么用b+树
先从数据结构的角度来答。 题主应该知道B-树和B+树最重要的一个区别就是B+树只有叶节点存放数据,其余节点用来索引,而B-树是每个索引节点都会有Data域。 这就决定了B+树更适合用来存储外部数据,也就是所谓的磁盘数据。

先从数据结构的角度来答。
题主应该知道b-树和b+树最重要的一个区别就是b+树只有叶节点存放数据,其余节点用来索引,而b-树是每个索引节点都会有data域。
这就决定了b+树更适合用来存储外部数据,也就是所谓的磁盘数据。
从mysql(inoodb)的角度来看,b+树是用来充当索引的,一般来说索引非常大,尤其是关系性数据库这种数据量大的索引能达到亿级别,所以为了减少内存的占用,索引也会被存储在磁盘上。
那么mysql如何衡量查询效率呢?磁盘io次数,b-树(b类树)的特定就是每层节点数目非常多,层数很少,目的就是为了就少磁盘io次数,当查询数据的时候,最好的情况就是很快找到目标索引,然后读取数据,使用b+树就能很好的完成这个目的,但是b-树的每个节点都有data域(指针),这无疑增大了节点大小,说白了增加了磁盘io次数(磁盘io一次读出的数据量大小是固定的,单个数据变大,每次读出的就少,io次数增多,一次io多耗时啊!),而b+树除了叶子节点其它节点并不存储数据,节点小,磁盘io次数就少。这是优点之一。
另一个优点是什么,b+树所有的data域在叶子节点,一般来说都会进行一个优化,就是将所有的叶子节点用指针串起来。这样遍历叶子节点就能获得全部数据,这样就能进行区间访问啦。
至于mongodb为什么使用b-树而不是b+树,可以从它的设计角度来考虑,它并不是传统的关系性数据库,而是以json格式作为存储的nosql,目的就是高性能,高可用,易扩展。首先它摆脱了关系模型,上面所述的优点2需求就没那么强烈了,其次mysql由于使用b+树,数据都在叶节点上,每次查询都需要访问到叶节点,而mongodb使用b-树,所有节点都有data域,只要找到指定索引就可以进行访问,无疑单次查询平均快于mysql(但侧面来看mysql至少平均查询耗时差不多)。
总体来说,mysql选用b+树和mongodb选用b-树还是以自己的需求来选择的。

先从数据结构的角度来答。
题主应该知道b-树和b+树最重要的一个区别就是b+树只有叶节点存放数据,其余节点用来索引,而b-树是每个索引节点都会有data域。
这就决定了b+树更适合用来存储外部数据,也就是所谓的磁盘数据。
从mysql(inoodb)的角度来看,b+树是用来充当索引的,一般来说索引非常大,尤其是关系性数据库这种数据量大的索引能达到亿级别,所以为了减少内存的占用,索引也会被存储在磁盘上。
那么mysql如何衡量查询效率呢?磁盘io次数,b-树(b类树)的特定就是每层节点数目非常多,层数很少,目的就是为了就少磁盘io次数,当查询数据的时候,最好的情况就是很快找到目标索引,然后读取数据,使用b+树就能很好的完成这个目的,但是b-树的每个节点都有data域(指针),这无疑增大了节点大小,说白了增加了磁盘io次数(磁盘io一次读出的数据量大小是固定的,单个数据变大,每次读出的就少,io次数增多,一次io多耗时啊!),而b+树除了叶子节点其它节点并不存储数据,节点小,磁盘io次数就少。这是优点之一。
另一个优点是什么,b+树所有的data域在叶子节点,一般来说都会进行一个优化,就是将所有的叶子节点用指针串起来。这样遍历叶子节点就能获得全部数据,这样就能进行区间访问啦。
至于mongodb为什么使用b-树而不是b+树,可以从它的设计角度来考虑,它并不是传统的关系性数据库,而是以json格式作为存储的nosql,目的就是高性能,高可用,易扩展。首先它摆脱了关系模型,上面所述的优点2需求就没那么强烈了,其次mysql由于使用b+树,数据都在叶节点上,每次查询都需要访问到叶节点,而mongodb使用b-树,所有节点都有data域,只要找到指定索引就可以进行访问,无疑单次查询平均快于mysql(但侧面来看mysql至少平均查询耗时差不多)。
总体来说,mysql选用b+树和mongodb选用b-树还是以自己的需求来选择的。

先从数据结构的角度来答。 题主应该知道B-树和B+树最重要的一个区别就是B+树只有叶节点存放数据,其余节点用来索引,而B-树是每个索引节点都会有Data域。 这就决定了B+树更适合用来存储外部数据,也就是所谓的磁盘数据。 从Mysql(Inoodb)的角...


开源数据库有哪些
2、MongoDB MongoDB是一款开源、面向文档并且也是当下人气最旺的Nosql数据库,它也是一款介于关系数据库和非关系数据库之间的产品。Mongo最大特点是它支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。还具有高...

请问使用mongodb数据库有哪些优势?
下面是一个瑭锦TANJURD总结 MongoDB 优缺点的列表,希望对打算使用 MongoDB 的同学,能有一些作用:优势:快速!(当然,这和具体的应用方式有关,通常来说,它比一般的关系型数据库快5位左右。)很高的可扩展性 – 轻轻松松就可实现PB级的存储(但是可能我们并不需要PB级的存储,10TB可能就够了)他...

mongoDB如何处理多对多关系
问题描述:例如在关系数据库中有一个Team表,一个User表,两者是多对多的关系,即一个Team可以有多个User,一个User也可能属于多个Team,请问这样的关系在MongoDB中如何存储?如果是一对多,我知道可以用嵌套,但不知道如何处理多对多的关系,请指教。【来自山贼】问题解答:如何处理好多对多的关系可谓是...

如何正确关闭MongoDB
首先MongoDB使用mmap方式进行数据文件管理,也就是说写操作基本是在内存中进行,写操作会被每隔60秒 (syncdelay设定)的flush到磁盘里。如果在这60秒内flush处于停止事情我们进行kill -9那么从上次flush之后的写入数据将会全部丢失。如果在flush操作进行时执行kill -9则会造成文件混乱,可能导致数据全丢了,...

关闭MongoDB服务的几种方法
https:\/\/blog.csdn.net\/github_38885296\/article\/details\/80619191 MongoDB 提供几种关闭服务的命令 使用 mongod 命令关闭  [mongo@redhatB data]$ mongod  --shutdown  --dbpath \/database\/mongodb\/data\/ killing process with pid: 17747 使用 kill 命令  ...

linux下的mongodb服务自动关闭,不知道什么原因
为解决频繁的数据插入和更新问题(这些数据的可靠性要求不高,不需要事务),赶上NoMysql的热潮,选择目前最热门的Mongodb,在测试中充分感受到mongodb安装的简单性和客户端调用API的便捷。但在生产环境下(操作系统CentOS 6.2,内存64G,CPU 12核),却出现频繁的宕机,有时候一天就要宕2次,虽然设置...

MongoDB WriteConcern与ReadConcern
客户端在写入数据时,可以通过writeConcern来配置写入策略,其包含如下选项 MongoDB Replset复制是通过secondary节点不断拉取primary上的oplog并重放来实现的,那 w:majority 是如何确保写入到大多数的呢?MongoDB V3.2引入了readConcern来配置读策略,该参数容易与readPreference混淆,两者并不冲突,区别如下...

mysql和mongodb的关系区别是什么
3、查询语句:mysql为传统的sql语句,mongodb有独特的自有查询方式 4、架构特点:mysql有常见的单点,m-s、mha、mmm、cluster等架构特点,mongodb可以通过副本集以及分片来实现高可用 5、数据处理方式:mysql不同的引擎有各自的特点,mongodb基于内存,将数据存储在物理内存中,从而达到高速读写 6、成熟度...

mongodb存储数据和文档存储数据的区别?
这个记录能够对包含的数据类型和内容进行“自我描述”。另外如果你用文档的话,查询,检索效率不高,使用数据库可以带来许多好处:如减少了数据的冗余度,从而大大地节省了数据的存储空间;实现数据资源的充分共享等等。此外,数据库技术还为用户提供了非常简便的使用手段使用户易于编写有关数据库应用程序。

如何正确关闭MongoDB
第一种 使用正确的关闭方法 官方文档说明要使用 kill -15,killall mongod或者在client的shell里,use admin,执行db.shutdownServer()即可!第二种 通过replication 使用 一个slave,或者用replica set 来避免单结点数据丢失。第三种 1.7以后出现类似于binlog的功能 在 MongoDB 1.7 版本的最新分支上...

定结县19631034462: 为什么有关MongoDB采用B树索引,以及Mysql B+树做索引 -
战胥特依: 先从数据结构的角度来答.题主应该知道B-树和B+树最重要的一个区别就是B+树只有叶节点存放数据,其余节点用来索引,而B-树是每个索引节点都会有Data域.这就决定了B+树更适合用来存储外部数据,也就是所谓的磁盘数据.从Mysql(...

定结县19631034462: 什么是B+树索引? -
战胥特依: B+树是一种树数据结构,常见于数据库与档案系统之中.B+树能够使资料保持有序,并拥有均匀的对数处理时间的插入和删除动作.B树的元素通常会自底向上插入,有别于多数自顶向下插入的二叉树.B+ 树在节点访问时间远远超过节点内部...

定结县19631034462: mongo和mysql索引有什么不同? -
战胥特依: Mongodb和Mysql索引选型 1)首先两种数据库都选择平衡m叉树作为底层索引结构,因为平衡树m叉树是同种元素序列情况下的深度最小的m叉排序树.这可以减少m叉树元素查找的深度,从而提升平均查找效率.B树和B+树都是平衡m叉树. ...

定结县19631034462: 基于数据库搜索的算法,关键有哪几点 -
战胥特依: B+、B- Tree(mysql,oracle,mongodb) 主要用在关系数据库的索引中,如oracle,mysql innodb;mongodb中的索引也是B-树实现的;还有HBase中HFile中的DataBlock的索引等等. 动态查找树主要有:二叉查找树(Binary Search Tree),平衡二叉...

定结县19631034462: SQL聚集索引和非聚集索引的区别 -
战胥特依: 根本区别:聚集索引和非聚集索引的根本区别是表记录的排列顺序和与索引的排列顺序是否一致.1、聚集索引 聚集索引表记录的排列顺序和索引的排列顺序一致,所以查询效率快,只要找到第一个索引值记录,其余就连续性的记录在物理也一样连续存放.聚集索引对应的缺点就是修改慢,因为为了保证表中记录的物理和索引顺序一致,在记录插入的时候,会对数据页重新排序.2、非聚集索引 非聚集索引制定了表中记录的逻辑顺序,但是记录的物理和索引不一定一致,两种索引都采用B+树结构,非聚集索引的叶子层并不和实际数据页相重叠,而采用叶子层包含一个指向表中的记录在数据页中的指针方式.非聚集索引层次多,不会造成数据重排.

定结县19631034462: MongoDB普通索引和唯一索引区别与创建 -
战胥特依: 性之类的限制.唯一性索引 这种索引和前面的“普通索引”基本相同,但有一个区别:索引列的所有值都只能出现一次,即必须唯一.

定结县19631034462: 比较b - tree索引和bit - wise索引技术的区别,各自适用的场合 -
战胥特依: 一.B-Tree索引:1. 选项择索引字段的原则:l 在WHERE子句中最频繁使用的字段l 联接语句中的联接字段l 选择高选择性的字段(如果很少的字段拥有相同值,即有很多独特值,则选择性很好)l ORACLE在UNIQUE和主键字段上自动建立索...

定结县19631034462: 聚集索引和非聚集索引的区别有哪些 -
战胥特依: 聚集索引:其中行的物理排序与索引排序相同,并且聚集索引的最低一级(叶级)包含实际的数据行.一个表或视图只允许同时有一个聚集索引. 在创建任何非聚集索引之前创建聚集索引.创建聚集索引时重建表上现有的非聚集索引. 如果没...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网