Mysql
在一個事務中使索引成為非常大的 MySQL 表中的唯一索引 - 以下方法安全嗎?
為了優化 SELECT 語句,我嘗試在 MySQL 中使用以下 SQL 語句創建索引 UNIQUE:
ALTER TABLE credentials DROP INDEX special_credential_id, ADD UNIQUE KEY special_credential_id(special_credential_id)
我的問題是:這是一筆交易嗎?這意味著如果創建唯一索引失敗,舊的 special_credential_id 索引是否仍然存在?通常創建一個新索引很容易,但我們談論的是一個包含 100 個 Mio 條目的表。
那是一筆交易。它應該按原樣工作,但請按照以下兩個步驟操作:
第1步
在執行此操作之前,請測試唯一性。執行此計數查詢:
SELECT special_credential_id,COUNT(1) cnt FROM credentials GROUP BY special_credential_id HAVING COUNT(1) > 1;
如果有任何行返回(即,不是“空集”),請修復鍵,使它們是唯一的。否則,繼續
第2步
我將作為線上 DDL 執行此操作
ALTER TABLE credentials DROP INDEX special_credential_id ,ADD UNIQUE KEY special_credential_id (special_credential_id) ,ALGORITHM=INPLACE ,LOCK=NONE ;
如果您擔心這不起作用,請分兩步進行
ALTER TABLE credentials ADD UNIQUE KEY special_credential_id_2 (special_credential_id) ,ALGORITHM=INPLACE ,LOCK=NONE ; ALTER TABLE credentials DROP INDEX special_credential_id ,ALGORITHM=INPLACE ,LOCK=NONE ;