mysql – 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);
SELECT var1 FROM a WHERE var2=INTEGER;
DELETE FROM a WHERE var2=INTEGER;
最佳答案
这是因为您创建的索引也占用了空间.对于InnoDB中的聚簇索引,行数据实际存储在索引叶节点内,因此当使用索引时,索引不指向行,而是指向包含行数据的索引叶节点与PKEY.

这导致存储量大得多.

Take a look here

相关文章

在正式开始之前,我们先来看下 MySQL 服务器的配置和版本号信...
> [合辑地址:MySQL全面瓦解](https://www.cnblogs.c...
物理服务机的CPU、内存、存储设备、连接数等资源有限,某个时...
1 回顾 上一节我们详细讲解了如何对数据库进行分区操作,包括...
navicat查看某个表的所有字段的详细信息 navicat设计表只能一...
文章浏览阅读4.3k次。转载请把头部出处链接和尾部二维码一起...