直接开整。
Page Directory(页目录)
看完上篇是不是觉得n_owned这个为啥没提到,哈哈,今天我们来揭秘,
n_owned与数据页的页目录关系非常大(重申下n_owned的含义是每个页的数据都会分成多个组,每个组的带头大哥会存这个组的记录数,而其他记录则是存0)。
然后开始重点。我们知道了mysql数据页中的用户记录是按照主键大小排列单向链表存储的,那么我们怎么查询其中一条记录呢?举个例子,
select * from table where c1 = 3
最笨的方法遍历整个链表,但是这种low的方法mysql的大佬会用吗?那肯定不会呀,他们从图书的目录里想到了办法,那就是做一个页的目录,具体的过程如下:
槽设定规则
新增数据时槽如何变化?
数据如何查询?
Page Header(页面头)
页面头的数据如下图所示。至于里面的用处,后续会一一讲解。
File Header(页面头)
文件头的数据如下图所示。至于里面的用处,后续会一一讲解。
每个页都通过上个页号与下个页号相连,可以理解为双向链表。
页的类型分为一下几种。
File Trailer(文件尾部)
文件尾部只有两种数据。
正常情况下与检验和逻辑一致,只不过代表的是File Header中的 Fil_PAGE_LSN的后4位也是用于校验页的完整性。