为什么phpmyadmin要花这么长的时间才能生成ALTERTABLE语句
已经一个小时了,我有一张400万行的桌子。我忘了加一列;因此,我编写了一个ALTERTABLE语句来添加列为什么phpmyadmin要花这么长的时间才能生成ALTERTABLE语句,php,google-maps-markers,Php,Google Maps Markers,已经一个小时了,我有一张400万行的桌子。我忘了加一列;因此,我编写了一个ALTERTABLE语句来添加列 ALTER TABLE gblah ADD zipcode varchar(5) 我不知道为什么这要花很长时间。MySQL中的任何alter语句都需要与表中的行数成比例的时间。每当您修改一个表时,它都需要将该列添加到每条记录中,因此它必须接触每条记录。这不是PHPMyAdmin的功能。此外,在任何时候添加列时,如果有任何锁争用会阻塞alter语句,则应在应用程序脱机的情况下执行 虽然4M
ALTER TABLE gblah
ADD zipcode varchar(5)
我不知道为什么这要花很长时间。MySQL中的任何alter语句都需要与表中的行数成比例的时间。每当您修改一个表时,它都需要将该列添加到每条记录中,因此它必须接触每条记录。这不是PHPMyAdmin的功能。此外,在任何时候添加列时,如果有任何锁争用会阻塞alter语句,则应在应用程序脱机的情况下执行
虽然4M并不是那么多行,但有争用,并且取决于您的结构和数据库引擎,它可能需要一段时间(我认为MyISAM更改比innodb需要更长的时间,因为MyISAM需要整个表锁,并且处理并发性的能力较差) 如果您通过phpMyAdmin查看MySQL进程,您将看到整个表被复制、更改,然后被复制回。一张大桌子需要一段时间。此外,如果没有硬盘空间进行复制,ALTER查询将失败。我了解到,在一台小型服务器上修改2GB表的艰难过程。有400万行。它需要为每一行添加该字段。有趣的是,这是phpmyadmin的错。邮政系统私有化的另一个原因!那么1-2小时的时间是正常的吗?正常的时间取决于机器的速度、模式的复杂性、除alter语句之外的任何数据库负载、使用的数据库引擎。。。有几个因素。一个大的改变需要几个小时,这并不是不寻常的。对于包含数十亿条记录的表,通常情况下,它们会启动一个与生产系统分离的数据库服务器,使用最近的数据转储,添加列,然后在转储和完成之间重播事务。