Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/232.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么phpmyadmin要花这么长的时间才能生成ALTERTABLE语句_Php_Google Maps Markers - Fatal编程技术网

为什么phpmyadmin要花这么长的时间才能生成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

已经一个小时了,我有一张400万行的桌子。我忘了加一列;因此,我编写了一个ALTERTABLE语句来添加列

ALTER TABLE gblah
ADD zipcode varchar(5)

我不知道为什么这要花很长时间。

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


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

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

有400万行。它需要为每一行添加该字段。有趣的是,这是phpmyadmin的错。邮政系统私有化的另一个原因!那么1-2小时的时间是正常的吗?正常的时间取决于机器的速度、模式的复杂性、除alter语句之外的任何数据库负载、使用的数据库引擎。。。有几个因素。一个大的改变需要几个小时,这并不是不寻常的。对于包含数十亿条记录的表,通常情况下,它们会启动一个与生产系统分离的数据库服务器,使用最近的数据转储,添加列,然后在转储和完成之间重播事务。