这是我的MySQL InnoDB数据库。请注意表days
如何将index length
报告为0
。
这是表数据,方案和索引:
如您所见,该表定义了PRIMARY
列。这应该编入索引,对吧?所以应该有一定的索引长度。
但是,当我实际添加INDEX
列时,例如:
该表突然报告某个index length
,如下所示:
所以我想知道:发生了什么事?究竟什么是索引长度以及为什么它不考虑PRIMARY键,如果它们被索引?
答案 0 :(得分:2)
InnoDB根据主键将表行存储在clustered index中。因此,data_length
显示主键占用的页面大小。
index_length
显示辅助(非主要)索引占用的页面大小。
重新评论:
是的,在此表中不必在主键的第一列上创建额外的索引。 MySQL不会阻止你创建这样一个多余的索引,因为它相信你知道你在做什么。 : - )
您可以使用pt-duplicate-key-checker之类的工具来分析重复索引的元数据。在一个这样的案例中,由于索引重复,我发现了400GB的浪费空间!