執行 DELETE FROM table WHERE ... 後,資料筆數歸零,但 .ibd / .MYD 檔案大小不變。原因是 DELETE 僅標記刪除旗標,不整理資料檔案,留下的「洞」會被後續 INSERT 重複利用。
| 語法 | 空間釋放 | 說明 |
|---|---|---|
DELETE FROM table WHERE 條件 | 否 | 產生碎片,空間標記可重用 |
DELETE FROM table (無條件) | 是 | 等同 TRUNCATE,空間歸零 |
OPTIMIZE [LOCAL | NO_WRITE_TO_BINLOG] TABLE tbl_name [, tbl_name] ...
最簡單用法:
OPTIMIZE TABLE phpernote_article;
VARCHAR, BLOB, TEXT)的表經歷大量更新/刪除。ALTER TABLE ... ENGINE=InnoDB 重建。Data_free 欄位(SHOW TABLE STATUS)評估碎片程度。DELETE ... LIMIT 1000 避免長鎖表。ANALYZE TABLE 更新統計資訊,優化查詢計畫。