Bra*_*yer 6 mysql storage innodb
我在看MySQL中一个简单的表,它有4列,大小如下,
unsigned bigint (8 bytes)
unsigned bigint (8 bytes)
unsigned smallint (2 bytes)
unsigned tinyint (1 byte)
Run Code Online (Sandbox Code Playgroud)
所以我希望19字节/行.
此表中有1,654,150行,因此数据大小应为31,428,850字节(或大约30兆字节).
但我可以通过phpMyAdmin看到数据占用136.3 MiB(不包括指数的大小bigint 1, smallint, tinyint为79 MiB).
存储引擎是InnoDB,主键是bigint 1, bigint 2(用户ID和唯一的项ID).
编辑:根据评论中的要求,这是一个结果SHOW CREATE TABLE storage
CREATE TABLE `storage` (
`fbid` bigint(20) unsigned NOT NULL,
`unique_id` bigint(20) unsigned NOT NULL,
`collection_id` smallint(5) unsigned NOT NULL,
`egg_id` tinyint(3) unsigned NOT NULL,
PRIMARY KEY (`fbid`,`unique_id`),
KEY `fbid` (`fbid`,`collection_id`,`egg_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
Run Code Online (Sandbox Code Playgroud)
如果表频繁执行插入/删除/更新,您可能需要尝试运行OPTIMIZE TABLE查询来查看表可以收缩多少。数据文件中可能存在碎片整理和未使用的空间。
phpmyadmin 向您显示的数据大小不会是您所期望的。您会看到,当您第一次创建表时,它不会显示数据使用情况:0。它将是 16KB 或 32KB 或其他。当您插入记录时,大小不会改变。这就是innoDB控制表文件的方式,就像它想象的那样高效。
检查SHOW TABLE STATUS FROM {db_name}并查看表的每一行有多少 Avg_row_length。它也不会是19字节