innoDB 主键索引的B+tree高度为多高呢?
一、首先要知道数据库中一页是多少(16k)
1页是16k
每1k是1024字节
二、然后要知道B+tree的数据结构,
数据结构是:多路平衡二叉树:根节点:只存储key、指针(每个指针都会指向一页),而指针永远都会比key多一个----->叶子节点:1.所有的元素都会出现在叶子节点中并形成一个单向链表(mysql中为双向链表)2.叶子节点才会存储数据
三、知道了B+tree的数据结构后
带入第一点,一页存储16k ,1k 为1024字节,带入第二点 根节点只存储key、指针,假设key的类型bigint(8字节),mysql中一个指针占6字节,
根据以上信息,计算一个高度为2的b+tree的数据存储量,的公式为:n8+(n+1) * 6 = 102416
n 是key的个数 8是数据类型占的字节数
(n+1)是指针的个数(因为指针永远比key多一个故为n+1) 6是指针占的字节数
1024*16 总字节数 16384
问题:n 需要等于多少才能 * 8+n * 6 约等于16384呢
假设n = 1000
1000 * 8+1001 * 6 = 14006 ,这个结果接近 16384
经过多次假设最终得出以下
再假设 n &