線上 DDL 功能提供即時和就地表格變更以及並行 DML 的支援。此功能的優點包括
在繁忙的生產環境中提高回應能力和可用性,在這些環境中,使表格無法使用幾分鐘或幾小時是不切實際的。
對於就地操作,能夠使用
LOCK
子句調整 DDL 操作期間效能和並行性之間的平衡。請參閱 LOCK 子句。比表格複製方法使用更少的磁碟空間和 I/O 負擔。
通常,您不需要執行任何特殊操作來啟用線上 DDL。預設情況下,MySQL 會在允許的情況下盡可能以最少的鎖定立即或就地執行操作。
您可以使用 ALTER TABLE
陳述式的 ALGORITHM
和 LOCK
子句來控制 DDL 操作的各個方面。這些子句位於陳述式的末尾,並以逗號與表格和資料行規格分隔。例如
ALTER TABLE tbl_name ADD PRIMARY KEY (column), ALGORITHM=INPLACE;
LOCK
子句可以用於就地執行的操作,並且適用於在操作期間微調對表格的並行存取程度。只有 LOCK=DEFAULT
支援立即執行的操作。ALGORITHM
子句主要用於效能比較,以及在您遇到任何問題時回退到較舊的表格複製行為。例如
為了避免在就地
ALTER TABLE
操作期間意外使表格無法讀取、寫入或同時無法讀寫,請在ALTER TABLE
陳述式上指定子句,例如LOCK=NONE
(允許讀寫)或LOCK=SHARED
(允許讀取)。如果要求的並行等級不可用,則操作會立即停止。為了比較不同演算法的效能,請使用
ALGORITHM=INSTANT
、ALGORITHM=INPLACE
和ALGORITHM=COPY
執行語句。您也可以在啟用old_alter_table
設定選項的情況下執行語句,以強制使用ALGORITHM=COPY
。為了避免
ALTER TABLE
操作複製表格而佔用伺服器資源,請包含ALGORITHM=INSTANT
或ALGORITHM=INPLACE
。如果無法使用指定的演算法,該語句會立即停止。