我有一個包含超過100K記錄的表,並且此表的主鍵由4列組成。現在我想刪除主鍵但保留由於主鍵定義而默認創建的索引,因此對於如此大的數據值應避免重新創建索引。如何刪除主鍵約束但保持索引
我正在使用MariaDB 5.5.x版本。
我有一個包含超過100K記錄的表,並且此表的主鍵由4列組成。現在我想刪除主鍵但保留由於主鍵定義而默認創建的索引,因此對於如此大的數據值應避免重新創建索引。如何刪除主鍵約束但保持索引
我正在使用MariaDB 5.5.x版本。
當你放棄主鍵時,你不能只保留簡單的索引部分。
如果表是innodb,那麼最好先刪除主鍵,然後重新創建索引,因爲所有secondary indexes contain the primary key也是如此。因此,如果您先創建二級索引,然後放下pk,那麼mariadb也必須修改二級索引。
如果您計劃創建另一個pk,則先創建該pk,然後根據相同的原因創建任何輔助索引。
在InnoDB中,更改PK(PRIMARY KEY
)始終需要重建整個表。期。
製作全部單個變化ALTER TABLE
。這裏會發生什麼(所以你可以看到爲什麼這是最好的)...
ALTER TABLE
指示的方式。RENAME
移動新表代替舊的。 (這是原子和速度。)如果您有兩個ALTERs
對PK進行兩次更改,您將會經歷所有這些步驟兩次。
每個輔助鍵都包含PK列的副本。所以任何改變PK 要求重建全部次要鑰匙。
在InnoDB中是錯誤有沒有PK的表。 (將提供一個隱藏的序列號,但這會使維護,複製等更加痛苦。)
如果您正在談論除InnoDB以外的某些引擎,那麼不要。你應該只使用InnoDB。 (我說的大部分內容並不適用於MyISAM。)
您可以嘗試此操作 - 在刪除主鍵之前,在鍵列上創建索引,然後刪除主鍵。它可能比放棄PK和創建新索引需要更少的時間。 –