如果MySQL';s InnoDB主列会自动索引,为什么索引长度报告为零?
这是我的MySQL 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显示辅助(
days
如何将索引长度
报告为0
这是表数据、方案和索引:
如您所见,该表定义了一个PRIMARY
列。这应该被编入索引,对吗?所以应该有一定的索引长度
但是,当我实际添加索引
列时,例如:
该表突然报告了某个索引长度
,如下所示:
所以我想知道:到底发生了什么?索引长度到底是多少?如果主键被索引,为什么不考虑它们呢?InnoDB基于主键将表行存储在a中。因此,
data\u length
显示主键占用的页面大小
index\u length
显示辅助(非主)索引占用的页面大小
请回复您的评论: 是的,在这个表中没有必要在主键的第一列上创建额外的索引。MySQL不会阻止您创建这样一个多余的索引,因为它相信您知道自己在做什么。:-)
您可以使用类似的工具来分析元数据中的重复索引。在一个这样的例子中,我发现由于重复索引而浪费了400GB的空间 您的主键是一个复合键(多个字段),因此长度报告在键中的第一个字段上,即
user
。由于days
本质上是一个piggy backing,所以它有一个0长度的键,因为它已经在用户字段中进行了说明。@MarcB:你确定这个解释吗?因为这发生在所有没有定义索引且仅在单个字段上包含主键的表上。作为id
PRIMARY的简单表,username
将索引长度报告为0。这是否意味着将索引键添加到用户列只会产生更多无用的数据,因为用户已经在主键中编制了索引?