B树:
每个节点都存储key和data,所有节点组成这颗树,并且叶子节点指针为NUll
B+树
只有叶子节点存储data,叶子节点包含了这棵树的所有键值对,叶子节点不存储指针。
B树不管是叶子节点还是非叶子节点,都会保存数据,这样导致在非叶子节点中能保存的指针数量变少。指针少的情况下要保存大量的数据,只能增加树的高度,导致IO操作变多,查询性能降低。
在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操作,可选择
推荐看过的一篇博客,关于讲解mysql中两种存储引擎的:
https://www.cnblogs.com/leedaily/p/8378779.html