Mysql

儘管對 ALTER TABLE 使用 ALGORITHM=INPLACE,為什麼 MySQL InnoDB 表仍被複製

  • June 10, 2021

我在 MySQL 伺服器版本 5.7 上的 InnoDB 表上執行 ALTER STATEMENT:

  • 刪除一些外鍵約束
  • 刪除一些索引(非唯一)
  • 添加一些列(沒有索引或外鍵約束,但它們沒有添加到表的末尾,我使用AFTER子句)

我使用該ALGORITHM=INPLACE選項。但是該表仍在複製中,我看到在數據庫目錄中創建了臨時文件。根據DDL 操作文件,所有這些操作都支持 INPLACE 修改。為什麼我的表還是被複製了?我沒有收到任何錯誤消息。

我使用 AFTER 子句

這會產生錯誤,從而迫使您使用ALGORITHM=COPY.

更多的

在頁面https://dev.mysql.com/doc/refman/5.7/en/innodb-online-ddl-operations.html上,請參閱

表 14.12 列操作的線上 DDL 支持

它說“添加列”和“重新排序列”是“就地”和“重建表”完成的。

我認為這意味著從技術上講這不是“副本”,但仍然是一項昂貴的操作。(我發現該頁面難以閱讀和解釋。)

至於您觀察到的臨時文件,我沒有答案。

引用自:https://dba.stackexchange.com/questions/290790