0
我注意到在几个InnoDB表中有一个主键,一个唯一键,一个或两个引用键。索引长度比数据长度本身大得多。问题是为什么?为什么在InnoDB中索引大小大于数据大小?
我可以大声思考的唯一事情是因为InnoDB使用聚集索引并将表数据与主键一起存储在计算中包含数据大小。我没有检查过这个。
我注意到在几个InnoDB表中有一个主键,一个唯一键,一个或两个引用键。索引长度比数据长度本身大得多。问题是为什么?为什么在InnoDB中索引大小大于数据大小?
我可以大声思考的唯一事情是因为InnoDB使用聚集索引并将表数据与主键一起存储在计算中包含数据大小。我没有检查过这个。
对于InnoDB表,的SHOW TABLE STATUS
输出装置执行以下操作:
Data_length
字段表示分配给群集键(PRIMARY KEY
在SQL术语)的所有页面的大小。Index_length
字段表示分配给所有非聚集键(全部为INDEX
,UNIQUE
,SQL等)的所有分页的总和大小。Data_free
表示分配给索引但目前未使用的所有范围(不是页面)的大小。现在,除了知道如何计算空间外,还应该记住每个辅助(非集群)密钥还将包含主(集群)密钥的所有字段。如果你的PRIMARY KEY
定义特别大,这可能相当于每个辅助密钥中使用的空间的巨大数量。
如果您提供表格架构(使用SHOW CREATE TABLE
),我可以进一步评论。
是的。有问题的表已退出大量跨越3个或更多列组合主键。我提到的那一刻,我添加了一个二级密钥索引长度。 – roarky