Mysql

從表中刪除行後恢復磁碟空間

  • January 13, 2021

我使用 innodb 引擎從其中一張表中刪除了數百萬行。我知道我需要跑來optimize table恢復空間。但是執行它會導致表鎖定,這會影響生產查詢。有沒有其他方法可以在不影響生產查詢的情況下恢復空間。

innodb_file_per_table為 ON,表中有大約 15,221,827 行。

沒有約束或外鍵。

您必須使表離線以防止任何讀取或寫入會被鎖定並且可能必須回滾。如果該表被呼叫mydb.mytable,則必須執行以下操作:

USE mydb
DROP TABLE IF EXISTS mytablenew;
CREATE TABLE mytablenew LIKE mytable;
ALTER TABLE mytable RENAME mytableold;
INSERT INTO mytablenew SELECT * FROM mytableold;
ANALYZE TABLE mytablenew;
ALTER TABLE mytablenew RENAME mytable;
DROP TABLE mytableold;

任何嘗試讀取或寫入的查詢mytable都將立即失敗,而不是掛在OPTIMIZE TABLE.

試一試 !!!

更新 2013-08-26 15:24 EDT

回頭看看我建議的程式碼。請注意行

ALTER TABLE mytable RENAME mytableold;

該行使表相對於應用程序離線。

要了解優化需要多長時間,請執行以下命令:

USE mydb
CREATE TABLE mytablenew LIKE mytable;
INSERT INTO mytablenew SELECT * FROM mytable;

無論這需要多長時間,實際執行需要多長時間。

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