为什么InnoDB中的索引大小大于数据大小?

时间:2014-02-10 12:58:06

标签: mysql indexing innodb

我注意到在一对InnoDB表中有一个主键,一个唯一键,一个或两个引用键。索引长度远大于数据长度本身。问题是为什么?

我唯一可以大声思考的是因为InnoDB使用聚簇索引并存储表数据以及主键,它包括计算中的数据大小。我没有检查过这个。

1 个答案:

答案 0 :(得分:2)

对于InnoDB表,SHOW TABLE STATUS的输出表示以下内容:

  • Data_length字段表示分配给群集密钥的所有页面的大小(SQL术语中为PRIMARY KEY)。
  • Index_length字段表示分配给所有非群集密钥的所有分页总和的大小(所有INDEXUNIQUE等,以SQL术语表示。)
  • Data_free表示分配给索引但当前未使用的所有范围(非页面)的大小。

现在,除了知道如何考虑空间之外,还应该记住每个辅助(非群集)密钥还将包含主(群集)密钥中的所有字段。如果您的PRIMARY KEY定义特别大,则可能相当于每个辅助密钥中使用的大量空间。

如果您提供表格架构(使用SHOW CREATE TABLE),我可以进一步发表评论。