MySQL(四)-索引为什么是B+树?

本文探讨了数据库索引常用的数据结构,包括Hash、数组、二叉树、红黑树、B树和B+树。Hash提供快速查询但无法满足排序需求;数组虽排序良好但修改成本高;二叉树存在不平衡问题;红黑树解决了平衡,但数据量大时查询效率下降。B树和B+树作为平衡多路搜索树,B+树以其独特的结构,如非叶子节点不存储数据和优化的查询效率,成为数据库索引的理想选择。
摘要由CSDN通过智能技术生成

数据库索引,必须满足查询快,且排序的特性

首先来看一下,常常用来索引的数据结构

1、Hash

Hash索引通过Hash算法建立hash表,任何的数据算出hash值后,都能够通过近似O(1)的效率查询到结果
Hash两种常见算法:

  • 拉链法
  • 开放地址法

但是因为hash是无序的,根本满足不了数据库排序以及范围查询

2、数组

数组不仅能够对数据进行排序,而且索引查询效率高,遍历全表也可以通过二分查询

但是为什么不能当作数据库索引呢,因为修改操作会导致大量的数据挪移,这应该都能理解

3、二叉树

有人又想到了二叉树,树不仅能够排序而且查询效率高

但是普通的树有个通病,容易出现左右子树不平衡,左右查询效率相差过大

4、红黑树

于是想到了面试常客红黑树,红黑树作为经典平衡树,不仅满足树的特性,而且解决了不平衡的特点

但是因为他是二叉树,数据一多,树的高度离谱,io读取(索引文件)消耗的时间就长,耽误效率
io读取和内存查询的速度相差太多

5、B树

平衡多路搜索树,每个索引节点都会携带数据
但Innodb默认规定页大小最大16KB,如果索引节点带上数据的话,可能一个节点容纳的索引会变少,导致B树高度变高,影响效率

6、B+树

B+树是一个平衡多路搜索树
不仅解决了平衡,而且多子树限制了树的高度,亿级的数据也就最多三层,io效率大大提高

B+ 树非叶子节点上是不存储数据的,仅存储键值,而 B 树节点中不仅存储键值,也会存储数据。之所以这么做是因为在数据库中页的大小是固定的,InnoDB 中页的默认大小是 16KB。如果不存储数据,那么就会存储更多的键值,相应的树的阶数(节点的子节点树)就会更大,树就会更矮更胖,如此一来我们查找数据进行磁盘的 IO 次数又会再次减少,数据查询的效率也会更快。

而且B树数据结点没有双向指针,对范围查找十分不友好

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值