OPTIMIZE TABLE MYSQL

Mysql庫中刪除了大量的數據後,您可能會發現數據文件尺寸並無減少。這是由於刪除操做後在數據文件中留下碎片所致。OPTIMIZE TABLE 是指對錶進行優化。若是已經刪除了表的一大部分數據,或者若是已經對含有可變長度行的表(含有 VARCHAR 、 BLOB 或 TEXT 列的表)進行了不少更改,就應該使用 OPTIMIZE TABLE 命令來進行表優化。這個命令能夠將表中的空間碎片進行合併,而且能夠消除因爲刪除或者更新形成的空間浪費 。OPTIMIZE TABLE 命令只對 MyISAM 、 BDB 和 InnoDB 表起做用 。表優化的工做能夠每週或者每個月按期執行,對提升表的訪問效率有必定的好處,可是須要注意的是,優化表期間會鎖定表,因此必定要安排在空閒時段進行。mysql

mysql> optimize table tb_notice;

當你刪除數據 時,mysql並不會回收,被已刪除數據的佔據的存儲空間,以及索引位。而是空在那裏,而是等待新的數據來彌補這個空缺,這樣就有一個缺乏,若是一時半 會,沒有數據來填補這個空缺,那這樣就太浪費資源了。因此對於寫比較頻煩的表,要按期進行optimizesql

手冊中關於OPTIMIZE的一些用法和描述

OPTIMIZE [LOCAL | NO_WRITE_TO_BINLOG] TABLE tbl_name [, tbl_name] ...

若是您已經刪除了表的一大部分,或者若是您已經對含有可變長度行的表(含有VARCHAR, BLOB或TEXT列的表)進行了不少更改,則應使用 OPTIMIZE TABLE。被刪除的記錄被保持在連接清單中,後續的INSERT操做會從新使用舊的記錄位置。您可使用OPTIMIZE TABLE來從新 利用未使用的空間,並整理數據文件的碎片。優化

在多數的設置中,您根本不須要運行OPTIMIZE TABLE。即便您對可變長度的行進行了大量的更新,您也不須要常常運行,每週一次或每個月一次 便可,只對特定的表運行。索引

OPTIMIZE TABLE只對MyISAM, BDB和InnoDB表起做用。資源

注意,在OPTIMIZE TABLE運行過程當中,MySQL會鎖定表。table

相關文章
相關標籤/搜索