在 MySQL 中,对于 InnoDB 引擎,如何找出我在同一个表中拥有的索引之一的大小?
我知道我可以从 information_schema.tables 中选择 index_length,但这给出了表中所有索引的总大小。
假设我有一个包含 PK 索引、几个 FK 索引和唯一约束等的表。我能找出其中一个索引的大小吗?假设,我只想知道 PK 索引的大小。
小智 6
似乎没有办法直接从mysql中得到答案;但是你可以很好地估计它:
对于 innodb,PRIMARY 索引是数据本身的一部分,并显示在 data_length 中。如果表没有其他索引,则 index_length 为 0。
对于表中的每一行,每个非 PRIMARY(UNIQUE 或 INDEX)索引存储
索引中列的大小是实际数据占用的空间加上每个 VARCHAR/TEXT/BLOB 的 1 或 2 个字节的长度。NULL 不占用空间。
对于 B 树页面和非完整叶页面,还有大约 1.4 倍到 2.8 倍的额外开销。在我的数据库中,它看起来通常是 2 倍左右。
FK 不应有超出其所需索引的任何空间开销。