【数据库】B+树与索引之间的恩怨情仇

本文详细介绍了B+树这种数据结构及其在数据库索引中的应用,对比了B+树与其他树形结构如B-树、AVL树、红黑树等的特点,并探讨了它们在实际场景中的优缺点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

本文参考了图灵学院线上直播课。

按照陈树义前辈在《聊聊整体性学习方法》一文中提到的思想,本文思路如下:

  1. 获取:什么是B+树、索引?
  2. 理解:B+树的特点、索引的作用?
  3. 扩展:B+树与B-树、AVL树、红黑树、二叉树、Hash的区别?
  4. 纠错:怎样一眼区分B-树与B+树?
  5. 应用:如何更好的建表、创建索引?

正文

一、什么是B+树、索引?

​ B+树是一种数据结构,如下图百度百科所说:

B+树
​ 索引是一种有序的存储结构,如下图百度百科所说:

索引
​ 二者间关系就是,再Mysql数据库中,常用B+树的数据结构来存储索引。

二、B+树的特点、索引的作用?

​ B+树的特点百度百科说是可以保持数据稳定有序,插入与修改拥有较稳定的时间复杂度

​ 索引的作用百度百科说是相当于图书的目录,可根据目录中的页码快速找到所需的内容。

三、B+树与B-树、AVL树、红黑树、二叉树、Hash的区别?

​ 关于这些树的区别可以参考文章《浅谈AVL树,红黑树,B树,B+树原理及应用》

​ 我凭我浅显的理解,画出了下面这个关系

二叉树
上图最下面的B+树data之间其实是双箭头关系(老师说这里他画错了),只有这样才能实现区间查询
其中一些名词解释:

AVL解释:
an AVL tree (Georgy Adelson-Velsky and Landis’ tree, named after the inventors) is a self-balancing binary search tree.
AVL是按照其发明人的姓氏首字母命名的,原名是自动平衡二叉树。

红黑树原名是symmetric binary B-trees 平衡二叉B树

B-树解释:
a B-tree is a tree data structure that keeps data sorted and allows searches, sequential access, insertions, and deletions in logarithmic time. The B-tree is a generalization of a binary search tree in that a node can have more than two children (Comer 1979, p. 123). Unlike self-balancing binary search trees, the B-tree is optimized for systems that read and write large blocks of data. It is commonly used in databases and filesystems.
B-树与B+树属于多路平衡二叉树

​ 上面都是一些树之间的关系,另外还有一个东西叫Hash(哈希)

准确的说,Hash只是一个公式,即Hash函数。如下图百度百科所述:
Hash

​ Hash表与二叉树结合看,如下图:

Hash与二叉树
​ 在Mysql创建索引时,可以选择BTREE与HASH两种索引方式。

​ 二者显著的区别就是:BTREE支持等值查询区间查询而Hash只支持等值查询。(注意:二者都不支持不等查询,思考一下即可知道,无论BTREE还是HASH,都是通过指定值查询的,对于 != 或 <> 查询,只能进行全表查询

​ 可以发现,Hash表无论数据有多少,只有一级,因此,查询比BTREE快,但因其不支持区间查询,而被大多数业务所舍弃。

​ 老师在课上还大概估算了一下3级B+树大概能存多少数据,估算方法如下:

​ Mysql默认B+树一层大小设置为16KB

​ 每层中会存储索引地址(8B/个)和指向下级索引的指针(6B/个),共能存储约 1170个索引节点

​ 1170个索引节点大概能指向16个1KB大小的数据文件(假设1条记录1KB)

​ 最后估算得出,仅仅3层B+树,大概能存储数据量为 1170 * 1170 * 16 ≈ 2000W 条1KB的数据

2千万计算

四、以前一些错误的思想

​ B-树,读音:B树,- 只是个符号

​ 一眼区分B-树与B+树的方法:
B树

B+树

五、如何更好的建表、创建索引?

​ 理论基础已经搭好了,以后实战之后再来补这块…

​ 另外还有一些InnoDB与MyISAM存储引擎的知识,可以参考知乎《Mysql 中 MyISAM 和 InnoDB 的区别有哪些?》

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值