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