我有一个在InnoDB引擎中的表,非常简单,有25000行。当我做一个简单的改动,它运行了近10分:MySQL(Percona 5.7)用InnoDB引擎减慢ALTER表... ...?
mysql> ALTER TABLE `quote_followups_istvan`
ADD `customer_ip2` VARCHAR(20) NOT NULL DEFAULT '' AFTER `comment`;
查询OK,0行受到影响(10分52.82秒) 记录:0重复:0警告:0
但是,当我改变它的发动机的MyISAM,我得到这个:
mysql> alter table quote_followups_istvan engine="MyISAM";
查询确定,受影响(0.56秒)25053行 记录:25053次重复:0警告:0
mysql> ALTER TABLE `quote_followups_istvan`
ADD `customer_ip3` VARCHAR(20) NOT NULL DEFAULT '' AFTER `comment`;
查询OK,25053行受到影响(0.37秒) 记录:25053次重复:0警告:0
所以10分钟VS 0.37s ....
这里我错过什么AMD?
编辑: 事实上,特定的ALTER查询花了一段时间(显然),我不知道为什么。例如,改变引擎速度很快,所以问题不在于ALTER本身。 –
吃橘子需要90秒。一个苹果需要30秒。吃苹果需要12秒钟。所以下次我想吃一个橙子时,我会买一个苹果,然后吃,因为它更快。回到你的问题:MyISAM与InnoDB的工作方式不同。有些事情更快。如果你想得到相同的结果(一个带有额外列的InnoDB表),你将不得不将表切换回InnoDB并在你的时间中包含它。虽然实际的原因可能是锁定你的表的东西,因为具有25k行的表应该更快地改变。 – Solarflare
表未锁定,它是一个测试表,不被任何进程使用。 除此之外,我不太明白为什么我会将其转换回InnoDB并计入这个时间。我的目标实际上是进行一个能够与InnoDb一起快速运行的查询。我只是将表格转换为MyISAM,因为我正在试验它,没有计划保留它。 –