如果MySQL';s InnoDB主列会自动索引,为什么索引长度报告为零?

如果MySQL';s InnoDB主列会自动索引,为什么索引长度报告为零?,mysql,indexing,primary-key,innodb,Mysql,Indexing,Primary Key,Innodb,这是我的MySQL InnoDB数据库。请注意表days如何将索引长度报告为0 这是表数据、方案和索引: 如您所见,该表定义了一个PRIMARY列。这应该被编入索引,对吗?所以应该有一定的索引长度 但是,当我实际添加索引列时,例如: 该表突然报告了某个索引长度,如下所示: 所以我想知道:到底发生了什么?索引长度到底是多少?如果主键被索引,为什么不考虑它们呢?InnoDB基于主键将表行存储在a中。因此,data\u length显示主键占用的页面大小 index\u length显示辅助(

这是我的MySQL InnoDB数据库。请注意表
days
如何将
索引长度
报告为
0

这是表数据、方案和索引:

如您所见,该表定义了一个
PRIMARY
列。这应该被编入索引,对吗?所以应该有一定的索引长度

但是,当我实际添加
索引
列时,例如:

该表突然报告了某个
索引长度
,如下所示:


所以我想知道:到底发生了什么?索引长度到底是多少?如果主键被索引,为什么不考虑它们呢?

InnoDB基于主键将表行存储在a中。因此,
data\u length
显示主键占用的页面大小

index\u length
显示辅助(非主)索引占用的页面大小


请回复您的评论:

是的,在这个表中没有必要在主键的第一列上创建额外的索引。MySQL不会阻止您创建这样一个多余的索引,因为它相信您知道自己在做什么。:-)


您可以使用类似的工具来分析元数据中的重复索引。在一个这样的例子中,我发现由于重复索引而浪费了400GB的空间

您的主键是一个复合键(多个字段),因此长度报告在键中的第一个字段上,即
user
。由于
days
本质上是一个piggy backing,所以它有一个0长度的键,因为它已经在用户字段中进行了说明。@MarcB:你确定这个解释吗?因为这发生在所有没有定义索引且仅在单个字段上包含主键的表上。作为
id
PRIMARY的简单表,
username
将索引长度报告为0。这是否意味着将索引键添加到用户列只会产生更多无用的数据,因为用户已经在主键中编制了索引?