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

MySQLB+树一页为什么是16KB呢?
最新回答
写不尽的思念

2026-10-20 09:31:25

MySQL中B+树一页设置为16KB,主要基于以下原因:

  • 减少I/O操作:

    MySQL的数据是放在页里面的,一次数据I/O至少加载一页数据。这样设计是为了减少I/O资源浪费。

    16KB的页大小在大多数业务场景下足够存储所需数据,从而减少了磁盘I/O的次数,提高了查询效率。

  • B+树结构特性:

    在InnoDB的B+树中,非叶子节点存储的是key和指针,而叶子节点存储的是数据行。

    这种结构使得B+树能够高效地进行范围查询和排序操作。

  • 存储容量计算:

    对于非叶子节点,如果key使用的是bigint(8字节),指针在MySQL中为6字节,那么一个索引指针共占用14字节。因此,16KB的页可以存储大约1170个索引指针(16 * 1024 / 14 ≈ 1170)。

    对于叶子节点,如果一行数据大小为1KB,那么一页就能存储16条数据。

  • 性能优化:

    通过合理设置页大小,MySQL能够确保B+树的高度保持在较低水平(通常为3层),从而支持高效的数据检索。

    例如,一个高度为3的B+树可以存储多达两千多万条数据(1170 x 1170 x 16 = 21902400),而通过主键查询只需要3次I/O操作就能找到对应数据。

综上所述,MySQL中B+树一页设置为16KB是出于减少I/O操作、适应B+树结构特性、优化存储容量以及提升查询性能等多方面的考虑。