已经一个小时了,我有一个包含400万行的表。我忘记添加列;因此,我编写了一个alter table语句来添加该列。
ALTER TABLE gblah
ADD zipcode varchar(5)我不确定为什么要花很长时间。
发布于 2012-06-16 02:48:12
MySQL中的任何alter语句都将花费与表中的行数成比例的时间。无论何时修改表,它都需要将该列添加到每条记录中,因此它必须接触每条记录。这不是PHPMyAdmin的函数。此外,无论何时添加列,都应该在应用程序脱机的情况下执行此操作,如果存在任何会阻碍alter语句的锁争用。
虽然4M不是那么多行,但有争用,而且取决于您的结构和数据库引擎,它可能需要一段时间(我认为MyISAM更改花费的时间比innodb长,因为MyISAM需要整个表锁,并且处理并发的能力较差)。
发布于 2012-06-16 03:17:55
如果您通过phpMyAdmin观察MySQL进程,您将看到整个表被复制、更改,然后再复制回来。一张大桌子需要一段时间。此外,如果您没有足够的硬盘空间来制作副本,那么ALTER查询将失败。我学到了在一台小服务器上修改一个2 2GB的表是很困难的。
https://stackoverflow.com/questions/11056482
复制相似问题