mysql - 为什么 InnoDB 中索引大小大于数据大小?

标签 mysql indexing innodb

我注意到在几个 InnoDB 表中都有一个主键、一个唯一键、一个或两个引用键。索引长度远大于数据长度本身。问题是为什么?

我唯一能想到的是,因为InnoDB使用聚集索引并将表数据与主键一起存储,所以它在计算中包括了数据大小。不过我还没有检查过。

最佳答案

对于 InnoDB 表,SHOW TABLE STATUS 的输出含义如下:

  • Data_length 字段表示分配给聚集键(SQL 术语中的PRIMARY KEY)的所有页面的大小。
  • Index_length 字段表示分配给所有非聚集键(所有 INDEXUNIQUE 等)的所有分页总和的大小.用 SQL 术语来说)。
  • Data_free 表示分配给索引但当前未使用的所有范围(不是页)的大小。

现在,除了了解如何占用空间之外,您还应该记住,每个辅助(非聚集)键还将包含主(聚集)键中的所有字段。如果您的 PRIMARY KEY 定义特别大,则每个辅助键中可能会占用大量空间。

如果您提供表架构(使用SHOW CREATE TABLE),我可以进一步发表评论。

关于mysql - 为什么 InnoDB 中索引大小大于数据大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21677906/

相关文章:

c# - 我需要正模数来进行数组索引迭代

mysql - 标准中的锁定模式 PESSIMISTIC_WRITE 与选择更新

mysql - 在 Mac OS X 上增加 MySQL InnoDB 表大小

php - 快速手册排队

php - 使用php将mysql查询存储在另一个表中

mysql - 有没有办法将 Mosquitto 有效负载存储到 MySQL 数据库中以供历史记录使用?

php - 如何使用HTML和PHP搜索项目并将结果与​​表单输出在同一页面上?

python-3.x - 这种 numpy.where() 方法可以适应两种情况而不是一种吗?

java - 为什么我无法使 setSelectedIndex 工作?

mysql - PHPmyadmin INNoDB恢复