當MySQL表資料量較大時,通過 DELETE 語句清理資料並不會直接釋放磁碟空間,僅會將資料庫記錄或資料頁標記為可重用。若需要真正回收資料表空間並減少磁碟佔用,可通過OPTIMIZE TABLE實現。
前提條件
僅InnoDB和MyISAM引擎支援
OPTIMIZE TABLE語句。執行個體剩餘磁碟空間必須大於等於需釋放表的空間。
注意事項
必須先刪除大量資料:如果未先通過
DELETE刪除大量資料,直接執行OPTIMIZE TABLE將無法有效降低資料表空間使用率。磁碟空間佔用的短暫增加:執行
OPTIMIZE TABLE時,MySQL會建立一個暫存資料表來儲存重組後的資料,這會導致磁碟空間在短時間內增加。操作完成後,暫存資料表會被刪除,磁碟空間佔用會恢複正常。效能影響與高峰期風險:在RDS MySQL 5.7和8.0 中,
OPTIMIZE TABLE使用Online DDL方式執行,支援並發DML操作。然而,對大表執行該操作可能引發突發的IO和Buffer資源佔用,存在鎖表或資源搶佔風險,業務高峰期還可能導致執行個體不可用或監控中斷。因此,建議選擇業務低峰期執行以避免對正常業務造成影響。
通過命令列操作
使用
DELETE語句清理不需要的資料,根據業務實際情況刪除即可。執行
OPTIMIZE TABLE命令,釋放資料表空間。OPTIMIZE TABLE <$Database1>.<Table1>,<$Database2>.<Table2>;說明<$Database1>與<$Database2>為資料庫名,<Table1>與<Table2>為表名。
在InnoDB引擎中執行
OPTIMIZE TABLE語句時,會出現以下提示資訊,該資訊是正常執行返回的結果,您可忽略資訊,確認返回“ok”即可。詳情請參見OPTIMIZE TABLE Statement。Table does not support optimize, doing recreate + analyze instead
通過DMS操作
在左側選擇目標執行個體的執行個體ID,然後雙擊目標庫,按右鍵任意表名,然後選擇大量操作表。
勾選需要釋放空間的表名,然後選擇。

在彈出的對話方塊中確認變更資訊正確,然後單擊確認即可。