Mysql底层执行过程及基于PK的“数据跳跃”

Mysql底层执行过程

当MySQL收到一个查询,特别是像 WHERE id = ? 这样的基于主键的查询时,它可以高效地找到所需的数据。以下是基于InnoDB存储引擎(MySQL的默认存储引擎)进行查询的底层过程:

  1. 解析查询: MySQL首先会解析查询,确定正在查询的表以及需要访问的索引。

  2. 查找聚集索引: 在InnoDB中,PRIMARY KEY 是一个聚集索引,意味着数据物理上按照主键值存储。

  3. 查找索引条目: MySQL开始通过主键索引查找数据。它首先查找B+树的根节点,这通常保存在内存中,因此非常快。

  4. 遍历B+树: MySQL然后沿着B+树结构遍历,从根节点开始,然后到中间节点,最后到叶子节点。每一步都是通过比较键值来确定下一步应该跟随哪个指针。这样的结构设计是为了使深度尽可能小,通常只需要几步就能找到所需的键值。

    举个例子:假设有一个B+树,根节点有三个键值:10, 20, 30。如果查询的ID是15,那么MySQL会选择键值10和20之间的指针,进入下一个中间节点或叶子节点。叶子节点通常来说不仅仅存储一条记录哦!

  5. 找到数据页: 当MySQL到达B+树的叶子节点时,它就找到了存储该记录的数据页(在InnoDB中,叶子节点实际上就是数据页)。

  6. 读取数据页: 一旦确定了数据页的位置,MySQL从磁盘(或者如果这个页已经在缓冲池中则从内存)中读取这个数据页。

  7. 返回结果: 当MySQL通过B+树索引找到了数据页后,它还需要在该页内搜索到具体的记录。但由于页内记录是有序的,这个查找过程也是非常快速的。

在上述过程中,“跳过”的概念实际上是指:在B+树结构中,由于索引的有序性和树的层次结构,MySQL可以迅速确定不包含所需数据的路径和数据页,从而只访问相关的数据页。


数据跳跃

作者总结:mysql的数据跳跃只是体现在B+树搜索叶子节点的过程中。

  1. B+树的搜索MySQL的B+树索引使其能够快速地定位到正确的数据页,这一步是通过跳跃完成的。从根节点开始,沿着索引结构向下,直到找到叶子节点(数据页)。这种结构的优点是,无论数据量有多大,定位到数据页所需的磁盘I/O操作都是相对固定的,因为B+树的高度是有限的。

  2. 页内搜索:一旦MySQL定位到了正确的数据页,它就需要在页内进行搜索以找到具体的记录。这是一个顺序搜索,但由于数据页的大小是固定且相对较小的(例如,16KB),并且页内的记录是有序的,所以这个搜索过程是非常迅速的。

所以,确实,MySQL的"数据跳跃"主要体现在B+树结构的利用上,而数据页内的搜索是顺序的但也非常高效。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Joy T

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

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

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

打赏作者

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

抵扣说明:

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

余额充值