我有一個在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,因爲我正在試驗它,沒有計劃保留它。 –