MySQLB+树一页为什么是16KB呢?

首先认识下索引数据结构

  • mysql的数据是放在页里面的,一次数据I/O至少加载一页数据.这样是为了减少I/O资源浪费
  • MySQL 中 B+ 树的一个节点大小为1页,也就是16k。之所以设置为一页,是因为对于大部分业务,一页就足够了:
  • InnoDB的B+树中,非叶子节点存的是key 和指针;叶子节点存的是数据行。
  • 对于非叶子节点,如果key使用的是bigint,则为8字节,指针在mysql中为6字节,一共是14字节,则16k能存放 16 * 1024 / 14 = 1170 个索引指针。
  • 对于叶子节点,如果一行数据大小为1k,那么一页就能存16条数据;
  • 于是可以算出

    高度为2的B+树(18720 条数据)

  • 根节点存储索引指针节点,那么它有1170个叶子节点存储数据,每个叶子节点可以存储16条数据,一共 1170 x 16 = 18720 条数据。
  • 而对于高度为3的B+树(21902400 条数据)

  • 就可以存放 1170 x 1170 x 16 = 21902400 条数据(两千多万条数据),也就是对于两千多万条的数据,
  • 所以在实际应用中InnoDB 中B+树高度一般为3层时就可以存储两千多万条数据,通过主键查询只需要3次IO操作就能查到对应数据。所以一个节点为1页,也就是16k是比较合理的。

    ©著作权归作者所有,转载或内容合作请联系作者
    【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
    平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

    相关阅读更多精彩内容

    友情链接更多精彩内容