【十三】MySQL索引的数据结构为什么用B+,而不是B,不是红黑树

前提具备知识点:【十一】MySQL中InnoDB及索引深入剖析(数据页、记录、页目录、B+树索引、聚簇索引、二级索引、索引优化 转自罗志赟)

 一、Mysql不用B-树的原因

1.Mysql衡量查询效率指标之一磁盘IO次数,B+树节点小,磁盘IO次数少

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

这就决定了B+树更适合用来存储外部数据,也就是所谓的磁盘数据。
从Mysql(Inoodb)的角度来看,B+树是用来充当索引的,一般来说索引非常大,所以为了减少内存的占用,索引也会被存储在磁盘上。

B类树的特点就是每层节点数目非常多,层数很少,目的就是为了就少磁盘IO次数。

当查询数据的时候,最好的情况就是很快找到目标索引,然后读取数据,使用B+树就能很好的完成这个目的。

B-树的每个节点都有data域(指针),这增大了节点大小,增加了磁盘IO次数(磁盘IO一次读出的数据量大小是固定的,单个数据变大,每次读出的就少,IO次数增多),而B+树除了叶子节点其它节点并不存储数据,节点小,磁盘IO次数就少。

2.B+树更擅长范围查询

B+树所有的Data域在叶子节点,所有的叶子节点用指针串起来形成双向链表。这样遍历叶子节点就能获得全部数据,这样就方便范围查询。

B-树范围查询只能中序遍历

二、Mysql不用红黑树的原因

在大规模数据存储的时候,红黑树往往出现由于树的深度过大而造成磁盘IO读写过于频繁,进而导致效率低下的情况。

获取磁盘上数据,必须先通过磁盘移动臂移动到数据所在的柱面,然后找到指定盘面,接着旋转盘面找到数据所在的磁道,最后对数据进行读写。

磁盘IO代价主要花费在查找所需的柱面上,树的深度过大会造成磁盘IO频繁读写

根据磁盘查找存取的次数往往由树的高度所决定,B类树可以有多个子女,从几十到上千,可以降低树的高度

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值