为什么B+Tree 存储千万级的数据只需要 3-4 层高度

  • MYSQL 一个页默认大小是 16KB,即 16384 字节。
  • 非叶子节点存储的是键值(索引)和指定子节点的指针,叶子节点存放行数据。

假设主键索引是 BigInt(对应 Long 类型),占 8 字节,子节点指针预计占 6 字节,那么一页的指针数量是 16384/(8+6)=1170 个,也就是可以指向 1170 个子数据页。

那么第一层 1 个根节点指向第二层的 1170 个子数据页,第二层每个字数据页又指向第三层的 1170 个子数据页。所以第三层共 1170*1170=1368900 个数据页。

假设一条数据占 1KB,那么一个数据页能存储 16 条数据。

假设一共三层,那么第三层叶子节点共存储 1368900*16=21902400 条数据。已经达到 2 千万级。

注意!!上述情况是假设,实际每条数据未必占用 1KB,那么 3 层的树高能存储更多数据,如果每条数据占用 512B 的话,那么 3 层能存储 21902400*2 条数据。

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计