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

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 提供的工具和命令来查看具体表的存储情况,以获得更准确的数据。

$li-margin-bottom = 0.8rem $post-tool-button-width = 2.5rem .post-tools-container { padding-top var(--component-gap) .post-tools-list { li { margin-bottom $li-margin-bottom &:last-child { margin-bottom 0 } } li.tools-item { position relative box-sizing border-box width $post-tool-button-width height $post-tool-button-width color var(--text-color-3) font-size 1.2rem background var(--background-color-1) border-radius 50% box-shadow 2px 2px 5px var(--shadow-color) cursor pointer &:hover { box-shadow 2px 2px 8px var(--shadow-hover-color) } i { color var(--text-color-3) } &:hover { color var(--background-color-1) background var(--primary-color) i { color var(--background-color-1) !important } } &.toggle-show-toc { display none } &.go-to-comments { .post-comments-count { position absolute top 0 right -1rem display none align-items center justify-content center box-sizing border-box min-width 1.1rem height 1.1rem padding 0 0.2rem color var(--badge-color) font-size 12px background var(--badge-background-color) border-radius 0.4rem +keep-tablet() { display none !important } } } } li.status-item { width $post-tool-button-width height $post-tool-button-width color var(--text-color-3) font-size 1.6rem cursor pointer &.post-lock { cursor default .fa-lock-open { display none color var(--keep-success-color) } &.decrypt { cursor pointer .fa-lock-open { display block } .fa-lock { display none } } } } } }