MySQL加索引語句不加鎖:ALGORITHM=INPLACE, LOCK=NONE

線上無鎖添加索引:加索引的語句不加鎖

ALTER TABLE tbl_name ADD PRIMARY KEY (column), ALGORITHM=INPLACE, LOCK=NONE;
ALGORITHM=INPLACE
更優秀的解決方案,在當前表加索引,步驟:
1.創建索引(二級索引)數據字典
2.加共享表鎖,禁止DML,允許查詢
3.讀取聚簇索引,構造新的索引項,排序並插
入新索引
4.等待打開當前表的所有隻讀事務提交
5.創建索引結束

ALGORITHM=COPY
通過臨時表創建索引,需要多一倍存儲,還有更多的IO,步驟:
1.新建帶索引(主鍵索引)的臨時表
2.鎖原表,禁止DML,允許查詢
3.將原表數據拷貝到臨時表
4.禁止讀寫,進行rename,升級字典鎖
5.完成創建索引操作

LOCK=DEFAULT:默認方式,MySQL自行判斷使用哪種LOCK模式,儘量不鎖表
LOCK=NONE:無鎖:允許Online DDL期間進行併發讀寫操作。如果Online DDL操
作不支持對錶的繼續寫入,則DDL操作失敗,對錶修改無效
LOCK=SHARED:共享鎖:Online DDL操作期間堵塞寫入,不影響讀取
LOCK=EXCLUSIVE:排它鎖:Online DDL操作期間不允許對鎖表進行任何操作
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章