高薪Offer收割机之索引及索引的数据结构

本文介绍了索引的概念及其在数据库高效查询中的作用,通过二叉树的例子阐述索引原理,并对比了二叉树、B树和B+树的优缺点。重点讲解了MySQL中InnoDB存储引擎使用的B+树索引结构,强调其在磁盘读写和区间查询上的优势。

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

什么是索引,索引的数据结构

索引是帮助数据库高效获取数据的数据结构,索引也是以文件的方式存在磁盘中,索引以某种方式指向数据,所以可以在索引中实现高效的数据查询。

我们以二叉树为例来讲解一下索引的原理。下图左边为原始表数据,右边为在年龄字段上建立的二叉树结构的索引。

9f7f7421c1a8683648c4153162d411c7.jpeg

8cc183d75fc15bb42749f024b5f957fc.jpeg

假设要查询年龄为19的人员的数据,如果没有索引需要全表扫描,从第一条数据开始依次比对年龄为19的数据。需要比对6次。

使用索引先在二叉树上查找,查到19需要比对3次,然后定位到左表的原始数据,速度得到明显提升,数据量越大提升效果越明显。

Mysql默认的的索引底层结构是B+树在讲解B+树之前我们先来看看其他数据结构用作索引有什么缺陷。

先来看看二叉树:

a711bf4e8bcdad4affed3ed21c8bdb7f.jpeg

二叉树的特点:一个节点最多有两个子节点,左子节点的元素小于右子节点因此可以快速定位到某一个元素。因为受限于最多只能有两个子节点的条件,当节点较多时层级也会较多,查找效率变低,在顺序插入的情况下可能会形成一个链表导致查询效率极大的下降:

a054e5ee7ab56978f60f91cef2170c2b.jpeg

再来看看B树:

B树每个节点可以包含多个子节点,并且允许一个节点包含多个Key,因此在数据量大的场景下B树的层级可以得到很好的控制,查询效率明显提高。

下图是一颗最大度数(一个节点中最多可以包含的子节点的数量)为5(5阶)的b-tree,这个B树每个节点最多存储4个key

1a38f3e805d09d4991819790229b4394.jpeg

B+树是在B树基础上的优化,MySql的存储引擎InnoDB使用的就是B+树实现索引结构:

74359da5b4c11fe974acec80870bcef3.jpeg

在B树中每个节点除了存储key以外还存储了对应的数据,而B+树除了叶子节点,其他节点都只存储key不存储数据,假如要查找key为6的数据则在查找非叶子节点时只需要读取key的值,这样就保证了在磁盘读写时代价更低。因为不需要每次都读取数据,查询效率也更高。

B+树中的叶子节点之间都有一个双向指针相连,所以相对于B树区间查询效率更高。

3

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

xiaxiaomao1981

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值