我注意到在一对InnoDB表中有一个主键,一个唯一键,一个或两个引用键。索引长度远大于数据长度本身。问题是为什么?
我唯一可以大声思考的是因为InnoDB使用聚簇索引并存储表数据以及主键,它包括计算中的数据大小。我没有检查过这个。
答案 0 :(得分:2)
对于InnoDB表,SHOW TABLE STATUS
的输出表示以下内容:
Data_length
字段表示分配给群集密钥的所有页面的大小(SQL术语中为PRIMARY KEY
)。Index_length
字段表示分配给所有非群集密钥的所有分页总和的大小(所有INDEX
,UNIQUE
等,以SQL术语表示。)Data_free
表示分配给索引但当前未使用的所有范围(非页面)的大小。现在,除了知道如何考虑空间之外,还应该记住每个辅助(非群集)密钥还将包含主(群集)密钥中的所有字段。如果您的PRIMARY KEY
定义特别大,则可能相当于每个辅助密钥中使用的大量空间。
如果您提供表格架构(使用SHOW CREATE TABLE
),我可以进一步发表评论。