0

已经一个小时了,我有一张有 400 万行的表格。我忘了添加一列;因此,我编写了一个 alter table 语句来添加该列。

ALTER TABLE gblah
ADD zipcode varchar(5)

我不知道为什么这需要永远。

4

2 回答 2

1

如果您通过 phpMyAdmin 查看 MySQL 进程,您会看到整个表被复制、更改,然后复制回来。一张大桌子需要一段时间。此外,如果您没有制作副本的硬盘空间,ALTER 查询将失败。我了解到尝试在小型服务器上更改 2GB 表的艰难方法。

于 2012-06-15T19:17:54.867 回答
1

MySQL 中的任何 alter 语句所花费的时间都与表中的行数成正比。每当您修改表时,它都需要将该列添加到每条记录中,因此它必须触及每条记录。这不是 PHPMyAdmin 的功能。此外,任何时候添加列时,都应该在应用程序脱机的情况下进行,如果有任何锁争用会阻碍 alter 语句。

虽然,4M 的行数并不多,但存在争用,并且取决于您的结构和数据库引擎,这可能需要一段时间(我认为 MyISAM 更改需要比 innodb 更长的时间,因为 MyISAM 需要整个表锁并且处理并发性不太好)。

于 2012-06-15T18:48:12.333 回答