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+树结构特性、优化存储容量以及提升查询性能等多方面的考虑。