【发布时间】:2013-11-21 16:13:39
【问题描述】:
我有点困惑,需要一些意见。
我在这里创建了 2 个表
CREATE TABLE `table1` (
`Id` int(11) NOT NULL AUTO_INCREMENT,
`Value` varchar(45) DEFAULT NULL,
PRIMARY KEY (`Id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
CREATE TABLE `table2` (
`Value` varchar(45) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
当我查看临时文件夹中文件的大小时。它们都是 96 kb
我只是在两列中插入了 10240 个项目。
SELECT count(*) FROM temp.table1;
SELECT count(*) FROM temp.table2;
给予
10240
10240
如果我现在查看表格的大小,这就是我得到的。
我在更改我的一个 innodb 表并添加了 AUTO_INCREMENT PRIMARY KEY 时发现了这一点,并且大小减少了 3 GB 以上。
我的印象是 innodb 有一个内部 PRIMARY KEY 以防万一没有定义?但是少1列的表怎么会占用更多的空间呢? table2 中没有索引(除了内部的PRIMARY KEY),并且在table1 上定义了一个PRIMARY KEY
这是否意味着内部innodb PK正在使用BIGINT?
编辑
将 PK 更改为 BIGINT 后,文件的大小现在相同。就这么简单。
但这确实引发了另一个问题。MySQL 行的 LIMIT 是 BIGINT 的最大值吗(这是很大的,但实际上有一个限制,对吧)? p>
【问题讨论】:
-
如果您再次丢弃密钥会发生什么?它会再次变大还是仍然很小? MySQL 基本上会为这样的更改重新创建整个表,因此它可能会在此过程中重新组织数据,从而导致文件缩小。
-
顺便说一句,400KB 的文件少了 3GB?您的意思是“少 30KB”吗?
-
innodb 内部 PK 是 BIGINT 类型,这就是大小不同的原因。但这给我带来了另一个关于 LIMIT to MySQL 的问题
-
@GolezTrol 不,这只是一个例子。但是我今天换了一张没有PK的直播桌,它缩小了3G。 (之前是25G,之后是22G)
标签: mysql primary-key innodb filesize