MySQL5.6 Online DDL線上狀態總結

chenfeng發表於2017-08-30
Yes*和No*表明結果依賴於其他一些附加條件:
執行操作 允許ALGORITHM=INPLACE    
是否複製表   
允許併發DML     
允許併發查詢
備註和注意事項
create index
add index
Yes*
No*
Yes
Yes
對於全文索引,有一些限制,具體看下一行。目前,該操作不是在原地執行,需要複製表.
add fulltext index
Yes
No*
No
Yes
建立第一個全文索引涉及到複製表,除非有使用FTS_DOC_ID列。後面的全文索引則在原地執行。
drop index 
Yes
No
Yes
Yes
 
optimize table
Yes
Yes
Yes
Yes
在MySQL5.6.17裡使用 ALGORITHM=INPLACE.


如果設定old_alter_table=1或使用mysqld –skip-new選項,則使用 ALGORITHM=COPY.

如果表使用了全文索引,則 ALGORITHM=INPLACE不適用
set default value for  column
Yes
No
Yes
Yes
修改.frm檔案,不涉及資料檔案
change auto-increment value
Yes
No
Yes
Yes
修改儲存到記憶體的一個值,不修改資料檔案
add  foreign key constraint
Yes*
No*
Yes
Yes
禁用foreign_key_checks,則可以避免複製表
drop  forgien key constraing
Yes
No
Yes
Yes
foreign_key_checks可以禁用或開啟
rename  column
Yes*
No*
Yes*
Yes
允許併發DML,保持相同的資料型別,僅改變欄位名
add  column
Yes
Yes
Yes*
Yes
增加auto-increment欄位時不允許DML操作. 
雖然ALGORITHM=INPLACE可以允許, 
但是資料要重組,代價比較昂貴.
drop column
Yes
Yes
Yes
Yes
雖然ALGORITHM=INPLACE可以允許,
但是資料要重組,代價比較昂貴.
reorder columns
Yes
Yes
Yes
Yes
雖然ALGORITHM=INPLACE可以允許,
但是資料要重組,代價比較昂貴.
change ROW_FORMAT
property
Yes
Yes
Yes
Yes
雖然ALGORITHM=INPLACE可以允許,
但是資料要重組,代價比較昂貴.
change KEY_BLOCK_SIZE 
property
Yes
Yes
Yes
Yes
雖然ALGORITHM=INPLACE可以允許,
但是資料要重組,代價比較昂貴.
make column null 
Yes
Yes
Yes
Yes
雖然ALGORITHM=INPLACE可以允許,
但是資料要重組,代價比較昂貴.
make cplumn not null 
Yes*
Yes
Yes
Yes
當SQL_MODE為strict_all_tables,如果執行的列包含null,則會執行失敗。


 
雖然ALGORITHM=INPLACE可以允許,
但是資料要重組,代價比較昂貴.
change data type 
of column
No
Yes
Yes
Yes
 
add primary key
Yes*
Yes
Yes
Yes
雖然ALGORITHM=INPLACE可以允許,
但是資料要重組,代價比較昂貴.
如果列必須轉換為非空的條件下,
ALGORITHM=INPLACE是不允許的。
drop primary key 
and add other
Yes
Yes
Yes
Yes
當在同一個alter table新增主鍵時ALGORITHM=INPLACE是允許的.資料要重組,因此代價比較昂貴.
 
drop primary key
No
Yes
No
Yes
刪除主鍵但是又不新增主鍵是被限制的
convert character set
No
Yes
No
Yes
如果新的字元編碼不同將會重建表
specify character set
No
Yes
No
Yes
如果新的字元編碼不同將會重建表
rebulid with 
force option
Yes
Yes
Yes
Yes
在MySQL5.6.17裡使用 ALGORITHM=INPLACE.


如果設定old_alter_table=1或使用mysqld –skip-new選項,則使用 ALGORITHM=COPY.

如果表使用了全文索引,則 ALGORITHM=INPLACE不適用

rebulid with 
“null”
 
alter table …
engine=innodb
Yes
Yes
Yes
Yes
在MySQL5.6.17裡使用 ALGORITHM=INPLACE.


如果設定old_alter_table=1或使用mysqld –skip-new選項,則使用 ALGORITHM=COPY.

如果表使用了全文索引,則 ALGORITHM=INPLACE不適用

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/15498/viewspace-2144305/,如需轉載,請註明出處,否則將追究法律責任。

相關文章