2

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

但似乎,它们都没有计算主键的大小。

我有数百万条记录的表,这些记录带有主键,没有其他索引,上面提到的两种方法都Index_length: 0适用于该表。表是 INNODB。

4

1 回答 1

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

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

希望有帮助。

于 2013-01-17T09:33:53.130 回答