B-Tree与B+Tree简明扼要的区别

原文:https://blog.csdn.net/zhuanzhe117/article/details/78039692 数据库

看了不少讲B树和B+树的文章,大多都是围绕各自的特性讲的,第一,树中每一个结点最多含有m个孩子(m>=2);第二,……我也是从这些文章里弄懂了各类树的联系与区别,要真写,我可能还不如人家写得好。因此就在这里简明扼要的用几张图记录一下主要区别吧。 安全

  为了便于说明,咱们先定义一条数据记录为一个二元组[key,data],key为记录的键值,key惟一;data为数据记录除key外的数据。数据结构

 

B树.net

  每一个节点都存储key和data,全部节点组成这棵树,而且叶子节点指针为null。3d

 

B+树指针

  只有叶子节点存储data,叶子节点包含了这棵树的全部键值,叶子节点不存储指针。blog

 

  后来,在B+树上增长了顺序访问指针,也就是每一个叶子节点增长一个指向相邻叶子节点的指针,这样一棵树成了数据库系统实现索引的首选数据结构。 索引

  缘由有不少,最主要的是这棵树矮胖,呵呵。通常来讲,索引很大,每每以索引文件的形式存储的磁盘上,索引查找时产生磁盘I/O消耗,相对于内存存取,I/O存取的消耗要高几个数量级,因此评价一个数据结构做为索引的优劣最重要的指标就是在查找过程当中磁盘I/O操做次数的时间复杂度。树高度越小,I/O次数越少。 事务

  那为何是B+树而不是B树呢,由于它内节点不存储data,这样一个节点就能够存储更多的key。内存

 

  在MySQL中,最经常使用的两个存储引擎是MyISAM和InnoDB,它们对索引的实现方式是不一样的。

 

MyISAM 

  data存的是数据地址。索引是索引,数据是数据。索引放在XX.MYI文件中,数据放在XX.MYD文件中,因此也叫非汇集索引。

 

InnoDB

  data存的是数据自己。索引也是数据。数据和索引存在一个XX.IDB文件中,因此也叫汇集索引。

 

  了解了数据结构再看索引,一切都不费解了,只是顺着逻辑推而已。另加两种存储引擎的区别:

一、MyISAM是非事务安全的,而InnoDB是事务安全的

二、MyISAM锁的粒度是表级的,而InnoDB支持行级锁

三、MyISAM支持全文类型索引,而InnoDB不支持全文索引

四、MyISAM相对简单,效率上要优于InnoDB,小型应用能够考虑使用MyISAM

五、MyISAM表保存成文件形式,跨平台使用更加方便

六、MyISAM管理非事务表,提供高速存储和检索以及全文搜索能力,若是在应用中执行大量select操做可选择

七、InnoDB用于事务处理,具备ACID事务支持等特性,若是在应用中执行大量insert和update操做,可选择。

相关文章
相关标签/搜索