當我們使用 MySQL 刪除表中的數據時,我們可能會認為表空間會隨之縮小。然而,在實際應用過程中,這并不一定正確。我們需要更深入地理解 MySQL 刪除數據對表空間的影響。
MySQL 采用類似分頁的方式來管理存儲空間,稱為“頁(page)”。和頁面分配一樣,MySQL 也使用了空間分配表(FSP—Free Space Page)來跟蹤這些頁面。當我們在表中刪除行時,該行占用的頁面會被標記為“被使用”,但實際上數據庫并沒有立即將該頁面返回給空間分配表。
這些已刪除但尚未釋放的頁面所占據的空間稱為“碎片(fragmentation)”。這是絕大多數關系數據庫中的常見問題。MySQL 中,碎片可以通過將整個表導出,再重新導入到新表中來消除。
當然,如果我們不愿意重新導入數據,則可以使用 OPTIMIZE TABLE 命令。這會對表進行重構,從而優化空間使用方式。這個命令可能需要一些時間,因為它要將表中的所有數據移動到新的位置,在此過程中表將不可用。
OPTIMIZE TABLE tablename;
總之,當我們刪除表中的數據時,我們不應該認為表空間會自動縮小。實際上,MySQL 會將這些頁面留在表空間中,并在以后將它們作為碎片。如果我們想要釋放這些頁面并優化表空間,我們需要手動運行 OPTIMIZE TABLE 命令。
下一篇vue如何實現探探