B+树单表超过2500万行的性能影响

(有许多人是用青春的幸福作成功的代价的。——莫扎特)

在这里插入图片描述

B+树

关于B+树的原理请查看这篇文章

分析

MySQL采用了索引组织表的形式组织数据,叶子节点存储数据,非叶子节点存储主键与页面号的映射关系。若用户的主键长度是8字节时,MySQL中页面偏移占4个字节,在非叶子节点的时候实际上是8+4=12个字节,12个字节表示一个页面的映射关系。

MySQL默认是16K的页面,抛开它的配置header,大概就是15K,因此,非叶子节点的索引页面可放151024/12=1280条数据,按照每行1K计算,每个叶子节点可以存15条数据。同理,三层就是151280*1280=24576000条数据。只有数据量达到24576000条时,深度才会增加为4,所以,索引深度没有那么容易增加,详细数据可参考下表。

索引深度 最大数据量(行数)
1 15
2 19200 (15*1280)
3 24576000 (1512801280)
4 31457280000 (1512801280*1280)

结论

超出这个数据量后,随着树层数的增加,IO查询的次数也会增加,性能也会降低。但为什么都说是到2500w之后才出现呢?因为单表达到千万级数据量的业务较少,在这个阶段就会因为数据量的增多而发现性能问题。

猜你喜欢

转载自blog.csdn.net/qq_42427109/article/details/131169531