mysql 数据页一页16kb能存多少数据量
Laiyong Wang Lv5

chatGPT 的答案

在 MySQL 的 InnoDB 存储引擎中,如果表的主键是一个整数类型,例如 INTBIGINT,每页能存储的行数取决于以下因素:

  1. 主键的数据类型和大小。
  2. 表中其他列的数据类型和大小。
  3. InnoDB 页的大小(默认是 16 KB)。
  4. 页头、页尾和页目录等元数据占用的空间。

计算示例

假设你有一个简单的表,其主键是 INT 类型,并且表只有一个主键列。 INT 类型占用 4 字节。如果页大小为 16 KB(16384 字节),我们可以计算出每页大约可以存储多少行。

步骤:

  1. 页大小: 16384 字节。
  2. 页头和页尾: 约 200 字节(这是一个近似值,实际可能略有差异)。
  3. 页目录: 约 100 字节(具体大小取决于行数,实际情况可能有所不同)。

可用空间计算

可用空间 = 16384 - 200 - 100 = 16084字节

计算每页行数

对于一个仅有 INT 主键的表,每行的大小为 4 字节:

每页行数 = 16084/4 = 4021

这意味着在理想情况下,一个 InnoDB 数据页可以存储大约 4021 行数据,每行只包含一个 INT 类型的主键列。

实际情况

在实际应用中,InnoDB 存储引擎的页中会有一些额外的开销,例如记录的标头信息、行的额外信息(如标志位、指针等)以及可能的行溢出情况。因此,实际能存储的行数会略少于理论计算值。

假设每行记录有额外的开销(例如标头信息等)为 10 字节,那么每行的实际大小为:

每行大小 = 4 + 10 = 14 字节

再重新计算每页行数:

每页行数 = 16084/14 = 1149

因此,考虑到各种额外的开销,InnoDB 数据页每页大约可以存储 1000 到 1200 行数据。

mysql 两千万数据是怎么来的

B+树通常是三层结构
非叶子结点,第一层和第二层 1149 * 1149 = 132W
叶子结点,因为保存有数据,假设其为1kb大小,则132w * 16 = 2112w,差不多就是两千万。

结论

对于一个主键为整数类型(例如 INT)的 InnoDB 表,每个 16 KB 的数据页大约可以存储 1000 到 1200 行数据。这个估计值是基于每行记录的额外开销和 InnoDB 的存储特性得出的,实际情况可能会有所不同。你可以使用 MySQL 提供的工具和命令来查看具体表的存储情况,以获得更准确的数据。

 Comments