2011-11-22 65 views
5

當使用命令:爲什麼MySQL使用臨時表來刪除主鍵?

ALTER TABLE my_table DROP PRIMARY KEY; 

狀態(當SHOW PROCESSLIST)顯示爲:

copy to tmp table 

爲什麼它會需要使用TMP表 「放下」 主鍵約束?

+0

「實現細節」;-)我會懷疑潛在的數據集羣變化 - 例如,它移動到一個「堆」或以其他方式重新聚集在特定的引擎中? (InnoDB?MyISAM?)由於它是DDL操作 - 而不是常見的 - 「最簡單的方式」通常是「最好的方式」,特別是如果它可以重用經過良好測試/驗證的代碼路徑。 – 2011-11-22 02:34:00

回答

5

考慮複合主鍵的情況。在這種情況下,數據庫引擎必須從合成密鑰創建新的聚簇索引,這需要移動行。 (請記住,行通過主鍵在磁盤上進行物理排序。)鑑於這種情況的罕見性,處理主鍵已經是整數的特殊情況並不值得。