本文整理自网络,侵删。
目录
- 一、页的概览
- 二、Infimum 和 Supremum
- 三、使用Page Directory
- 四、页的真实面貌
- 4.1、File Header
- 4.2、Page Header
- 4.3、Infimum & Supremum Records
- 4.4、User Records
- 4.5、Free Space
- 4.6、Page Directory
- 4.7、File Trailer
- 五、总结
一、页的概览
我们往 MySQL 插入的数据最终都是存在页中的。在 InnoDB 中的设计中,页与页之间是通过一个双向链表连接起来。
而存储在页中的一行一行的数据则是通过单链表连接起来的。
上图中的 User Records
的区域就是用来存储行数据的。那 InnoDB 为什么要这么设计?假设我们没有页这个概念,那么当我们查询时,成千上万的数据要如何做到快速的查询出结果?众所周知,MySQL 的性能是不错的,而如果没有页,我们剩下的只能是逐条逐条的遍历数据了。
那页是如何做到快速查询的呢?在当前页中,可以通过 User Records
中的连接每条记录的单链表来进行遍历,如果在当前页中没有找到,则可以通过下一页指针快速的跳到下一页进行查询。
二、Infimum 和 Supremum
有人可能会说了,你在 User Records
中还不是通过遍历来解决的,你就是简单的把数据分了个组而已。如果我的数据根本不在当前这个页中,那我难道还是得把之前的页中的每一条数据全部遍历完?这效率也太低了
当然,MySQL 也考虑到了这个问题,所以实际上在页中还存在一块区域叫做 The Infimum and Supremum Records
,代表了当前页中最大和最小的记录。
有了 Infimum Record
和 Supremum Record
,现在查询不需要将某一页的 User Records
全部遍历完,只需要将这两个记录和待查询的目标记录进行比较。比如我要查询的数据 id = 101
,那很明显不在当前页。接下来就可以通过下一页指针跳到下页进行检索。
三、使用Page Directory
可能有人又会说了,你这 User Records
里不也全是单链表吗?即使我知道我要找的数据在当前页,那最坏的情况下,不还是得挨个挨个的遍历100次才能找到我要找的数据?你管这也叫效率高?
不得不说,这的确是个问题,不过是一个 MySQL 已经考虑到的问题。不错,挨个遍历确实效率很低。为了解决这个问题,MySQL 又在页中加入了另一个区域 Page Directory
。
顾名思义,Page Directory
是个目录,里面有很多个槽位(Slots),每一个槽位都指向了一条 User Records
中的记录。大家可以看到,每隔几条数据,就会创建一个槽位。其实我图中给出的数据是非常严格按照其设定来的,在一个完整的页中,每隔6条数据就会有一个 Slot。
Page Directory 的设计不知道有没有让你想起另一个数据结构——跳表,只不过这里只抽象了一层索引
MySQL 会在新增数据的时候就将对应的 Slot 创建好,有了 Page Directory
,就可以对一张页的数据进行粗略的二分查找。至于为什么是粗略,毕竟 Page Directory
中不是完整的数据,二分查找出来的结果只能是个大概的位置,找到了这个大概的位置之后,还需要回到 User Records
中继续的进行挨个遍历匹配。
不过这样的效率已经比我们刚开始聊的原始版本高了很多了。
四、页的真实面貌
如果我开篇就把页的各种组成部分,各种概念直接抛出来,首先我自己接受不了,这样显得很僵硬。其次,对页不熟悉的人应该是不太能理解页为什么要这么设计的。所以我按照查询一条数据的一套思路,把页的大致的面貌呈现给了大家。
实际上,页上还存储了很多其他的字段,也还有其他的区域,但是这些都不会影响到我们对页的理解。所以,在对页有了一个较为清晰的认知之后,我们就可以来看看真实的页到底长啥样了。
上图就是页的实际全部组成,除了我们之前提到过的,还多了一些之前没有聊过的,例如 File Header
、Page Header
、Free Space
、File Tailer
。我们一个一个来看。
4.1、File Header
其实File Header
在上文已经聊过了,只是不叫这个名字。上面提到的上一页指针和下一页指针其实就是属于File Header
的,除此之外还有很多其他的数据。
相关阅读 >>
更多相关阅读请进入《mysql》频道 >>
数据库系统概念 第6版
机械工业出版社
本书主要讲述了数据模型、基于对象的数据库和XML、数据存储和查询、事务管理、体系结构等方面的内容。
转载请注明出处:木庄网络博客 » 浅谈MySQL之浅入深出页原理
相关推荐
评论
管理员已关闭评论功能...