D48-MySQL最少叉B+树
Posted 凯歌的笔记
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了D48-MySQL最少叉B+树相关的知识,希望对你有一定的参考价值。
鉴于昨天比预期发现差了226个元素,今天做了进一步的实验。首先将插入的key起点从1001开始,在插入了第101925个元素后,我再从1开始插入,果然可以保持树高不变,但并不是可以插入226个,要少于这个值。于是问题来了,innodb的B+树插入过程是怎样的?
为了弄明白这些,我需要简化模型,不然像这种226叉树,检查起来恐怕太难了。我需要在mysql中构造一个最小叉的B+树。
B+树的叉数是由PK的大小决定的,PK越大,一页能放下的PK越少,那么对应中间节点所能记录的孩子节点就越少,树叉越少。于是问题转向于一个PK最大是多少?
查了文档,在innodb_large_prefix禁用的情况下,最大767,而mysql 5.7的这个参数默认时启用的,最大3072(对于DYNAMIC和COMPRESSED行格式,5.7的默认行格式是DYNAMIC),这是16K页的情况。8K减半,1536,4K再减半,768。
16K/3072 == 8K/1536 == 4K/768 ~= 5.33
120(页头) + (5 + 768 + 4) x 5 + 4(DIR) + 8(页尾) = 4017 < 4096
所以最大PK的情况下,非页节点一页只能存下5个记录,5叉树是MySQL中可以构造的最少叉树。
以上是关于D48-MySQL最少叉B+树的主要内容,如果未能解决你的问题,请参考以下文章