操作 | Instant | In Place | Rebuilds Table | 允許并發(fā)DML | 僅修改元數(shù)據(jù) |
---|---|---|---|---|---|
添加列 | Yes* | Yes | No* | Yes* | No |
刪除列 | No | Yes | Yes | Yes | No |
重命名列 | No | Yes | No | Yes* | Yes |
更改列順序 | No | Yes | Yes | Yes | No |
設(shè)置列默認值 | Yes | Yes | No | Yes | Yes |
更改列數(shù)據(jù)類型 | No | No | Yes | No | No |
擴展VARCHAR列大小 | No | Yes | No | Yes | Yes |
刪除列默認值 | Yes | Yes | No | Yes | Yes |
更改自動增量值 | No | Yes | No | Yes | No* |
設(shè)置列為null | No | Yes | Yes* | Yes | No |
設(shè)置列not null | No | Yes* | Yes* | Yes | No |
修改ENUM/SET列的定義 | Yes | Yes | No | Yes | Yes |
instant 算法使用最廣泛的應(yīng)該是添加列了,可以看到使用該算法還是有些限制的,一些限制如下:
說的再多不如實際來測下,下面我們以 8.0.19 版本為例來實際驗證下:
# 利用sysbench生成一張1000W的大表 mysql> select version(); +-----------+ | version() | +-----------+ | 8.0.19 | +-----------+ 1 row in set (0.00 sec) mysql> select count(*) from sbtest1; +----------+ | count(*) | +----------+ | 10000000 | +----------+ # 增加無默認值的列 mysql> alter table sbtest1 add column col1 varchar(20), algorithm=instant; Query OK, 0 rows affected (0.63 sec) Records: 0 Duplicates: 0 Warnings: 0 # 增加有默認值的列 mysql> alter table sbtest1 add column create_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '創(chuàng)建時間', algorithm=instant; Query OK, 0 rows affected (0.58 sec) Records: 0 Duplicates: 0 Warnings: 0 # 不顯式指定instant算法 mysql> alter table sbtest1 add column col2 varchar(20); Query OK, 0 rows affected (0.55 sec) Records: 0 Duplicates: 0 Warnings: 0 # 設(shè)置列的默認值 mysql> alter table sbtest1 alter column col1 set default 'sql',algorithm=instant; Query OK, 0 rows affected (0.02 sec) Records: 0 Duplicates: 0 Warnings: 0 # 指定In Place算法添加列,(5.7版本添加列使用該算法) mysql> alter table sbtest1 add column col_inplace varchar(20),algorithm=inplace; Query OK, 0 rows affected (1 min 23.30 sec) Records: 0 Duplicates: 0 Warnings: 0
通過以上測試,我們可以發(fā)現(xiàn),使用 instant 算法添加列基本都在 1s 內(nèi)完成,對于大表來說這個速度是非??斓模瑯I(yè)務(wù)基本無感知。當(dāng)使用 5.7 版本的 inplace 算法時,則添加列的時間上升至數(shù)分鐘。對比看來 8.0 版本的快速加列功能確實非常實用!
總結(jié):
雖然快速加列存在一些限制, instant 算法也只適用于部分 DDL 操作,但 8.0 的這項新功能已經(jīng)足以令人興奮,很大程度上解決了大表加字段的大難題。通過這篇文章,希望各位能了解到這項新功能,是不是想升級到 8.0 了呢,可以著手準(zhǔn)確起來了。
以上就是MySQL8.0 如何快速加列的詳細內(nèi)容,更多關(guān)于MySQL8.0 快速加列的資料請關(guān)注腳本之家其它相關(guān)文章!
標(biāo)簽:日照 臺灣 合肥 貴州 鎮(zhèn)江 鷹潭 北京 阜新
巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《MySQL8.0 如何快速加列》,本文關(guān)鍵詞 MySQL8.0,如何,快速,加列,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。