InnoDB磁盘使用开销

时间:2011-07-29 00:30:02

标签: mysql database database-design innodb

我有一个包含两个32位整数的表。这两个整数用于创建聚簇索引。用于创建表的SQL如下,

CREATE TABLE `a` (
  `var1` int(10) unsigned NOT NULL,
  `var2` int(10) unsigned NOT NULL,
  PRIMARY KEY (`var2`,`var1`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
  • 此表格中有6921338行(使用SELECT COUNT(*) FROM a检索)
  • 该表使用358580224字节的空间(使用SHOW TABLE STATUS检索)

根据我的计算,每行使用51.8个字节。我知道InnoDB在storing rows时有开销。但是,使用MySQL网站,我计算出行大小应为26个字节(5个字节的头,8个字节的整数,6个字节的事务ID和7个字节的滚动指针字段)。

我正在尝试减少行大小,因为该表可能会填充多达160亿条记录。

我的计算中缺少什么?如何优化表格以减少占用空间?或者我应该切换到不同的数据库引擎吗?

更新

我为这个表做的查询;

INSERT INTO a(var1,var2) VALUES(INTEGER,INTEGER),(INTEGER,INTEGER),...,(INTEGER,INTEGER);
SELECT var1 FROM a WHERE var2=INTEGER;
DELETE FROM a WHERE var2=INTEGER;

1 个答案:

答案 0 :(得分:4)

这是因为您创建的索引也会占用空间。对于InnoDB中的聚簇索引,行数据实际上存储在索引叶节点内,因此当使用索引时,索引不指向行,而是指向包含行数据的索引叶节点与PKEY。

这导致存储空间大得多。

Take a look here