2个常见答案是使用show_table_status和INFORMATION_SCHEMA.TABLES
但看起来,它们都不计算主键的大小。
我有数百万条包含主键且没有其他索引的记录的表,上面提到的两种方法都显示了Index_length: 0
表。表格是INNODB。
答案 0 :(得分:3)
你的主键是你的桌子。在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
在这些链接中,他们更详细地解释了我上面所说的一切。简单地说,您已经拥有主键索引的大小,因为它是表的大小。
希望有所帮助。