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 ,建立了逻辑联系。
并且块之间的主键大小应该是 递增的。
尽管块内部的主键大小物理可能不是递增。