为什么 phpmyadmin 需要这么长时间才能更改表语句


Why does phpmyadmin take so long for an alter table statement

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

ALTER TABLE gblah
ADD zipcode varchar(5)

我不确定为什么这需要很长时间。

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

虽然,4M 不是那么多行,有争用,并且根据您的结构和数据库引擎,它可能需要一段时间(我认为 MyISAM 更改比 innodb 花费更长的时间,因为 MyISAM 需要整个表锁并且处理并发性不太好)。

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