已经过了一个小时,我有一张400万行的桌子。我忘了添加一个列;因此,我写了一个alter table语句来添加列。
ALTER TABLE gblah
ADD zipcode varchar(5)
我不确定为什么这需要永远。
答案 0 :(得分:1)
MySQL中的任何alter语句都需要与表中的行数成比例的时间。每次修改表时,都需要将该列添加到每条记录中,因此必须触及每条记录。这不是PHPMyAdmin的功能。此外,无论何时添加列,都应该在应用程序脱机的情况下执行此操作,如果存在任何会阻止alter语句的锁争用。
虽然,4M并不是那么多行,但是有争用,并且取决于你的结构和数据库引擎,可能需要一段时间(我认为MyISAM改变比innodb更长的时间,因为MyISAM需要整个表锁并且处理并发性不太好)。
答案 1 :(得分:1)
如果你通过phpMyAdmin观察MySQL进程,你会看到整个表被复制,更改,然后被复制回来。一张大桌子需要一段时间。此外,如果您没有硬盘空间来进行复制,则ALTER查询将失败。我了解到尝试在小型服务器上更改2GB表的困难方法。