參考 /doc/relnotes/mysql/8.0/en/news-8-0-12.html
在線DDL之 快速增加列(秒級別的),並不會造成業務抖動。該功能自 MySQL 8.0.12 版本引入,是由騰訊遊戲DBA團隊貢獻,我國程序員還是挺厲害的嘛。註意壹下,此功能只適用於 InnoDB 表。實際上MySQL 5.7就已支持 Online DDL,雖說大部分 DDL 不影響對表DML操作,但是依然會消耗非常多的時間,且占用額外的磁盤空間,並會造成主從延遲,或者影響表的查詢速度。有了這個ALGORITHM=INSTANT 就可應對瞬息萬變的需求了。。
ALGORITHM=INSTANT 目前對6種ddl有效:
實際試驗下,使用 mysql5.7的INPLACE 算法 時間: 52s。
使用 Instant Add Column ,時間:0.39 s。 果然是秒級別添加
當然我們不需要顯式指定algorithm=instant;mysql會優先使用INSTANT算法來進行ddl的;若顯式指定algorithm=instant 同時目標ddl不支持就會報錯。如下,DROP COLUMN 時指定則報錯
添加或刪除virtual 列
添加或刪除列默認值
修改 ENUM 定義
修改索引類型
重命名表,好像和5.7的INPLACE算法也沒啥時間上的區別。INPLACE的rename table已經足夠快了
還有壹些特殊情況不能使用ALGORITHM=INSTANT的:
Instant Add Column只能將新字段添加到表的尾巴上,不能添加到中間!
不支持壓縮表,即該表行格式不能是 COMPRESSED。
不支持包含全文索引的表;不支持臨時表;不支持那些在數據字典表空間中創建的表。這些就不壹壹驗證了。平時操作時要註意下!