ALTER COLUMN TYPE smallint(5) to int(11) horrible slow?



我有一个MySQL数据库(Innodb有大约500万行(,只想从定义的类型切换一个未索引的值列

`USERID` smallint(5) unsigned NOT NULL default '0'

为类型

`USERID` int(11) unsigned NOT NULL default '0'

所以我只需要它能够存储更大的值(65535是不够的(。我尝试使用下面的更新,但500万个条目(SSD,4核(需要17分钟

ALTER TABLE tbllog MODIFY COLUMN `USERID` int(11) unsigned NOT NULL default '0';

我想知道为什么这需要这么长时间,如果有一个简单但更快的方法

经过一些研究和测试,我找到了解决方案。最快的方法是首先删除除主索引之外的所有索引(只需一秒钟(。在此之后,调用修改(现在只花了32秒!(并最终重新创建索引。重新创建这两个索引需要1分钟44秒。

所以最后我从17分钟变成了不到3分钟。

最新更新