如果MySQL的InnoDB PRIMARY列被自动索引,为什么索引长度报告为零?

时间:2014-04-21 18:29:12

标签: mysql indexing primary-key innodb

这是我的MySQL InnoDB数据库。请注意表days如何将index length报告为0

enter image description here

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

enter image description here

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

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

enter image description here

该表突然报告某个index length,如下所示:

enter image description here

所以我想知道:发生了什么事?究竟什么是索引长度以及为什么它不考虑PRIMARY键,如果它们被索引?

1 个答案:

答案 0 :(得分:2)

InnoDB根据主键将表行存储在clustered index中。因此,data_length显示主键占用的页面大小。

index_length显示辅助(非主要)索引占用的页面大小。


重新评论:

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

您可以使用pt-duplicate-key-checker之类的工具来分析重复索引的元数据。在一个这样的案例中,由于索引重复,我发现了400GB的浪费空间!