找出具体索引的 MySQL 索引大小

Tim*_*mur 7 mysql innodb

在 MySQL 中,对于 InnoDB 引擎,如何找出我在同一个表中拥有的索引之一的大小?

我知道我可以从 information_schema.tables 中选择 index_length,但这给出了表中所有索引的总大小。

假设我有一个包含 PK 索引、几个 FK 索引和唯一约束等的表。我能找出其中一个索引的大小吗?假设,我只想知道 PK 索引的大小。

小智 6

似乎没有办法直接从mysql中得到答案;但是你可以很好地估计它:

对于 innodb,PRIMARY 索引是数据本身的一部分,并显示在 data_length 中。如果表没有其他索引,则 index_length 为 0。

对于表中的每一行,每个非 PRIMARY(UNIQUE 或 INDEX)索引存储

  • 6 字节开销
  • 索引的每一列
  • PRIMARY 中的每一列都不在索引中
  • 每个可能的 NULL 列 1 位,四舍五入到字节

索引中列的大小是实际数据占用的空间加上每个 VARCHAR/TEXT/BLOB 的 1 或 2 个字节的长度。NULL 不占用空间。

对于 B 树页面和非完整叶页面,还有大约 1.4 倍到 2.8 倍的额外开销。在我的数据库中,它看起来通常是 2 倍左右。

FK 不应有超出其所需索引的任何空间开销。

mysql 文档-源代码