Realm
2025-01-01
来自浙江
在网上查了下,理解下大概过程如下: 1. Mysql用索引组织数据,索引是B+树; 2. 非叶子节点和叶子节点,都保存在数据页中; 3. 一个数据页大小是16k,理论上mysql的B+树,最多有1280个树杈;计算过程如下: a. 非叶子节点的数据页(每个页的大小是16k),去掉每页的head和tail信息,有15k的空间,用来存放索引指针信息; b. 一个索引指针需要12Byte(主键ID:8Byte、指向下游的页号:4Byte) c. 15k/12Byte = 1280,也就是B+树最多有1280个树杈 4. 叶子节点存放的真实数据,假如一行数据的大小按1k,一个数据页,可以存15行数据; 5. 设B+树的层树为x,则叶子节点的数量有: 1280 ** (x - 1) *15 [1280的x-1次方,在乘以15] 6. 假如树只有3层(基于IO效率考虑),则可以存放:1280 ** 2 * 15 = 2.5千万 行数据 注意: 这有有很多限定条件,如至于3层,一行数据按1k计算。
1
lJ
2025-01-02
来自江苏
1. 如何理解图7中的proxy,需要自行开发还是有开源的实现。 2. “2000万行是大表”是基于经验总结和 MySQL 在不同场景下的性能瓶颈得出的经验值,超过了这个值可能会导致 B + 树层级更高,影响SQL性能。具体还需要结合业务场景和硬件配置。随着硬件性能和数据库优化手段的进步,这一数值可能会有所提高。但当表数据量显著增长时,适时进行表拆分是提升性能和扩展性的关键手段。