如何找出mysql中的索引大小(包括主键)

时间:2013-01-17 08:55:56

标签: mysql innodb indexing

2个常见答案是使用show_table_statusINFORMATION_SCHEMA.TABLES

但看起来,它们都不计算主键的大小。

我有数百万条包含主键且没有其他索引的记录的表,上面提到的两种方法都显示了Index_length: 0表。表格是INNODB。

1 个答案:

答案 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

在这些链接中,他们更详细地解释了我上面所说的一切。简单地说,您已经拥有主键索引的大小,因为它是表的大小。

希望有所帮助。