gpt4 book ai didi

mysql - InnoDB 磁盘使用开销

转载 作者:可可西里 更新时间:2023-11-01 07:06:35 25 4
gpt4 key购买 nike

我有一个包含两个 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 字节滚动指针字段)。

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

我的计算遗漏了什么?如何优化我的表以使用更少的空间?或者我应该切换到不同的数据库引擎?

更新

我对这张表的查询;

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;

最佳答案

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

这导致存储空间更大。

Take a look here

关于mysql - InnoDB 磁盘使用开销,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6867369/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com