2个常见的答案是使用show_table_status和INFORMATION_SCHEMA.TABLES
但是似乎它们都不计算主键的大小.
我有具有数百万条带有主键且没有其他索引的记录的表,并且上述两种方法都对该表显示Index_length:0.表是INNODB.
解决方法:
您的主键是您的表.在InnoDB中,主键包含实际数据,因此,如果主键包含数据,则为表.
考虑一下.您可以在InnoDB表的聚集索引和辅助索引上获得两种不同类型的索引.区别在于聚集索引包含数据,而二级索引包含索引列和指向数据的指针.因此,二级索引不包含数据,而是包含数据在CLUSTERED索引中的位置.
通常,主键是聚簇索引.将表及其所有值存储在一起,然后将其所有值存储在一起的聚簇索引将效率非常低下.这实际上将使表的大小增加一倍.
因此,当您拥有InnoDB上的主键时,表大小就是主键的大小.在某些数据库系统中,您可以将二级索引作为主键,并将单独的索引作为集群键,但是InnoDB不允许这样做.
请阅读以下链接以获取更多详细信息:
http://dev.mysql.com/doc/refman/5.0/en/innodb-table-and-index.html
http://dev.mysql.com/doc/refman/5.0/en/innodb-index-types.html
在这些链接中,他们更详细地解释了我上面所说的内容.简单地说,您已经拥有主键索引的大小,因为它就是表的大小.
希望能有所帮助.