B+树

B+树

主要区别就是所有的节点值都在最后叶节点上用双向链表连接在了一起

但是二叉树不能使用,因为比对次数太多,所以使用多叉树以减少比对次数

B+Tree中的非叶子结点不存储数据,只存储键值

非叶子节点可以看成索引部分,节点中仅含有其子树(根节点)中的最大(或最小)关键字

B+Tree的叶子结点没有指针,所有键值都会出现在叶子结点上,且key存储的键值对应data数据的物理地址

B+Tree的每个非叶子节点由n个键值key和n个指针point组成

B+Tree对比B-Tree

磁盘读写代价更低:每个节点中的key个数越多,那么树的高度越小,需要I/O的次数越少,因此一般来说B+Tree比BTree更快,因为B+Tree的非叶节点中不存储data,就可以存储更多的key。

查询速度更稳定。由于B+Tree非叶子节点不存储数据data,因此所有的数据都要查询至叶子节点,而叶子节点的高度都是相同的,因此所有数据的查询速度都是一样的。

B+树的查找过程,与B树类似,只不过查找时,如果在非叶子节点上的关键字等于给定值,并不终止,而是继续沿着指针直到叶子节点位置。因此在B+树,不管查找成功与否,每次查找都是走了一条从根到叶子节点的路径。

B+树的特性如下:

所有关键字都存储在叶子节上,且链表中的关键字恰好是有序的。
非叶子节点相当于叶子节点的索引,叶子节点相当于是存储(关键字)数据的数据层。
更适合文件索引系统。

一般在数据库系统或文件系统中使用的B+Tree结构都在经典B+Tree的基础上进行了优化,增加了顺序访问指针。

具体的索引实现

在MyISAM中,主索引和辅助索引Secondary key在结构上没有任何区别,只是主索引要求key是唯一的,而辅助索引的key可以重复。
主键索引MyISAM引擎使用B+树作为索引结构,叶节点的data域存放的是数据记录的地址。

辅助索引:同样也是一棵B+树,data域保存数据记录的地址。因此,MyISAM中索引检索的算法为首先按照B+树搜索算法搜索索引,如果指定的Key存在,则取出其data域的值,然后以data域的值为地址,读取相应数据记录。
MyISAM的索引方式也叫做“非聚集”的,之所以这么称呼是为了与InnoDB的聚集索引区分

innodb是索引组织表。在InnoDB中,表数据文件本身就是按B+树组织的一个索引结构(就是索引组织表),这棵树的叶节点data域保存了完整的数据记录。
因为InnoDB的数据文件本身要按主键聚集(聚集索引),所以InnoDB要求表必须有主键(MyISAM可以没有),如果没有显式指定,则MySQL会自动选择一个可以唯一标识数据记录的列作为主键,如果不存在这种列,则MySQL自动为InnoDB表生成一个隐含字段作为主键,这个字段长度为6个字节,类型为长整型。

辅助索引首先检索辅助索引获得主键,然后用主键到主索引中检索获得记录。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值