我注意到在几个 InnoDB 表中都有一个主键、一个唯一键、一个或两个引用键。索引长度远大于数据长度本身。问题是为什么?
我唯一能想到的是,因为InnoDB使用聚集索引并将表数据与主键一起存储,所以它在计算中包括了数据大小。不过我还没有检查过。
最佳答案
对于 InnoDB 表,SHOW TABLE STATUS
的输出含义如下:
Data_length
字段表示分配给聚集键(SQL 术语中的PRIMARY KEY
)的所有页面的大小。Index_length
字段表示分配给所有非聚集键(所有INDEX
、UNIQUE
等)的所有分页总和的大小.用 SQL 术语来说)。Data_free
表示分配给索引但当前未使用的所有范围(不是页)的大小。
现在,除了了解如何占用空间之外,您还应该记住,每个辅助(非聚集)键还将包含主(聚集)键中的所有字段。如果您的 PRIMARY KEY
定义特别大,则每个辅助键中可能会占用大量空间。
如果您提供表架构(使用SHOW CREATE TABLE
),我可以进一步发表评论。
关于mysql - 为什么 InnoDB 中索引大小大于数据大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21677906/