2014-02-10 178 views
0

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

我可以大声思考的唯一事情是因为InnoDB使用聚集索引并将表数据与主键一起存储在计算中包含数据大小。我没有检查过这个。

回答

1

对于InnoDB表,的SHOW TABLE STATUS输出装置执行以下操作:

  • Data_length字段表示分配给群集键(PRIMARY KEY在SQL术语)的所有页面的大小。
  • Index_length字段表示分配给所有非聚集键(全部为INDEX,UNIQUE,SQL等)的所有分页的总和大小。
  • Data_free表示分配给索引但目前未使用的所有范围(不是页面)的大小。

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

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

+0

是的。有问题的表已退出大量跨越3个或更多列组合主键。我提到的那一刻,我添加了一个二级密钥索引长度。 – roarky

相关问题