Mysql
從表中刪除行後恢復磁碟空間
我使用 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;
無論這需要多長時間,實際執行需要多長時間。