Mysql的B树和B+树分别能存储多大的数据量
1、Mysql B-Tree (不读"B减树",而读"B杠树"或者"B树")
第一层: 16
由于数据与key和指针都存放在了各自节点中,所以16k的节点,按数据1k计算,只能存放16条数据,即16个key
第二层: 16 * 16 = 256
第三层: 16 * 16 * 16 = 4096
三层加起来: 大约4000条数据
2、Mysql B+Tree
第一层: 16 * 1000 / 16 = 1000条
16 * 1000表示节点大小默认为16k,估算1k=1000,16表示8字节key长度+8字节指针。但有资料说指针长度是6字节,加起来应该是14字节,此处仅估算按16字节
第二层: 1000 * 1000 = 100w条
第一层的一个节点中有1000条数据,那分段有多少呢,1000+1个分段,但此处估算就不+1了,每个分段有一个指针指向二层的子节点,将有1000个子节点,每个子节点的数据量与第一层的数据量一样,即1000条数据
第三层: 1000 * 1000 * 16 = 1600w条
第三层因为存放了数据,所以key的数量就没那么大了,按一条数据1k计算,大约能存16条数据(16k/1k=16条)
1000表示第二层有1000个节点,第二个1000表示第二层每个节点有1000个指针(即在第三层上有1000个子节点),第三层的每个节点有16条数据
总数据量并不是将三层的数据量加起来,因为B+树只有叶子节点存数据,即第一层和第二层没有存放数据。所以第三层的数据量就是总数据量: 1600w条数据。上线取整到2000w条数据。
3、总结
B-Tree: 4000 条, 千级
B+Tree: 2000w条,千万级
一般是3层,即Mysql通过3次IO操作就可以找到数据