在mysql 5.5版本時,商用環境升級,有一個表存在六千多萬數據,升級時需要修改這個表其中一個varchar類型字段的長度,當時用了大概4個多小時,還沒有結束,之后我們系統mysql升級到5.7版本,再一次升級模擬測試中,又修改了該表的字段長度,這次用時為7個多小時,下面是記錄的時間。(進入mysql命令行,執行tee upgrade.log,之后執行的sql都會記錄到該log中,當不需要記錄時,執行notee)
Query OK, 0 rows affected (7 hours 48 min 9.15 sec) Records: 0 Duplicates: 0 Warnings: 0
雖然沒有sql信息,但該條sql執行時,使用如下命令查看的info信息確實就是在修改該表,所以可確定,這個時間就是這張表的字段修改造成的
show full processlist
在5.7上官網上查看Online DDL Operations介紹,發現添加某個參數后,修改表結構不用拷貝數據,這樣就會大大的節省了時間,改參數為ALGORITHM=INPLACE,但該參數只能用於字段長度變長的情況,否則值應該填寫為copy
mysql> ALTER TABLE db.table MODIFY COLUMN IPADDRESS VARCHAR(60), ALGORITHM=INPLACE; Query OK, 0 rows affected (0.06 sec) Records: 0 Duplicates: 0 Warnings: 0
添加了改參數后,修改字段長度的時間從七個多小時一下子就下降到了0.06秒,可以說是瞬間就執行結束,且修改成功