Innodb主键包含全部列的情况下,如何组织物理页

很简单,和有不是主键的列的格式一样。

实验:在 Mysql 8 中 创建一张主键包含全部列的表

 

 插入 10000 条数据。

 

 

因为是字符串做为主键(为了好辨别),所以大小是按照字典序来的

 

使用工具查看叶子节点结构,下面是部分截图,剩下的部分都是 一样的 level 为0的数据页。

着重看索引叶。也就是 level 为1的B+树叶

 

 

查看索引叶(偏移量为4的数据页):

 

发现偏移量为5的数据页,含有的记录的主键最小值是 sss...0bbbbb...0

偏移量为6的数据页,含有的记录的主键最小值是sss...195bbbb...0 

sss...N 这里的N是从0~10000

 

直接看到第5页的末尾,发现最大的主键值是 aaa...1119bbb...0

 

 

看一下第五页的下一个页是多少

 

 发现是 11,第11页的最小行记录是:aaa...123bbb...0

 

 

11页是数据页,最小记录确实是112起头

 

 

而112 是 1119 字典序的下一个,所以逻辑正确。虽然第11页和第5页不是物理上连续,但是两者逻辑上通过偏移量指针 5 指向 11 ,建立了逻辑联系。

并且块之间的主键大小应该是 递增的。

尽管块内部的主键大小物理可能不是递增。

 

posted @ 2021-01-05 21:33  执生  阅读(23)  评论(0编辑  收藏