Noa*_*oam 13 mysql database-design alter-table mysql-5.5
我需要将 600GB MySQL 表中的数据类型从 INT 更改为 BIGINT。该列具有唯一索引。我可能对 unsigned INT 很好,但我认为更改为 unsigned 或 BIGINT 将几乎相同的痛苦。该表的引擎是 InnoDB。什么会更容易:
INSERT INTO (SELECT *)更新:根据要求,MySQL 5.5.15 版,没有外键并创建表:
CREATE TABLE `tbl` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`user_id` int(11) NOT NULL,
`created_at` datetime NOT NULL,
`tid` bigint(20) NOT NULL,
`t` varchar(255) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
`f` tinyint(1) NOT NULL,
`i_id` bigint(20) NOT NULL,
`ir_id` int(11) NOT NULL,
`r_c` int(11) NOT NULL,
`r` tinyint(1) NOT NULL,
`e` text CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
`t` varchar(5) NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `user` (`user_id`,`tid`)
) ENGINE=InnoDB AUTO_INCREMENT=1657146169 DEFAULT CHARSET=utf8
Run Code Online (Sandbox Code Playgroud)
假设您的表上没有任何触发器,您应该考虑使用它,pt-online-schema-change因为它允许您在不锁定表的情况下更改表。
考虑到表的大小,这仍然需要相当长的时间。
此外,使用此方法或使用ALTER TABLE您将需要确保有 600 GB 的额外磁盘空间来支持重建表时的两个副本。