探討Mysql中OPTIMIZE TABLE的作用詳解
當(dāng)您的庫中刪除了大量的數(shù)據(jù)后,您可能會發(fā)現(xiàn)數(shù)據(jù)文件尺寸并沒有減小。這是因?yàn)閯h 除操作后在數(shù)據(jù)文件中留下碎片所致。Discuz! 在系統(tǒng)數(shù)設(shè)置界面提供了數(shù)據(jù)表優(yōu)化的功能,可以去除刪除操作后留下的數(shù)據(jù)文件碎片,減小文件尺寸,加快未來的讀寫操作。您只要在做完批量刪除,或定期(如 每一兩個(gè)月)進(jìn)行一次數(shù)據(jù)表優(yōu)化操作即可。
OPTIMIZE TABLE通過制作原來的表的一個(gè)臨時(shí)副本來工作
OPTIMIZE TABLE語法
OPTIMIZE [LOCAL | NO_WRITE_TO_BINLOG] TABLE tbl_name [, tbl_name] ...
如果您已經(jīng)刪除了表的一大部分,或者如果您已經(jīng)對含有可變長度行的表(含有 VARCHAR, BLOB或TEXT列的表)進(jìn)行了很多更改,則應(yīng)使用OPTIMIZE TABLE。被刪除的記錄被保持在鏈接清單中,后續(xù)的INSERT操作會重新使用舊的記錄位置。您可以使用OPTIMIZE TABLE來重新利用未使用的空間,并整理數(shù)據(jù)文件的碎片。
在多數(shù)的設(shè)置中,您根本不需要運(yùn)行OPTIMIZE TABLE。即使您對可變長度的行進(jìn)行了大量的更新,您也不需要經(jīng)常運(yùn)行,每周一次或每月一次即可,只對特定的表運(yùn)行。
OPTIMIZE TABLE只對MyISAM, BDB和InnoDB表起作用。
對于MyISAM表,OPTIMIZE TABLE按如下方式操作:
1. 如果表已經(jīng)刪除或分解了行,則修復(fù)表。
2. 如果未對索引頁進(jìn)行分類,則進(jìn)行分類。
3. 如果表的統(tǒng)計(jì)數(shù)據(jù)沒有更新(并且通過對索引進(jìn)行分類不能實(shí)現(xiàn)修復(fù)),則進(jìn)行更新。
對于BDB表,OPTIMIZE TABLE目前被映射到ANALYZE TABLE上。對于InnoDB表,OPTIMIZE TABLE被映射到ALTER TABLE上,這會重建表。重建操作能更新索引統(tǒng)計(jì)數(shù)據(jù)并釋放成簇索引中的未使用的空間。請參見13.5.2.1節(jié),“ANALYZE TABLE語法”。
使用—skip-new或—safe-mode選項(xiàng)可以啟動(dòng)mysqld。通過啟動(dòng)mysqld,您可以使OPTIMIZE TABLE對其它表類型起作用。
注意,在OPTIMIZE TABLE運(yùn)行過程中,MySQL會鎖定表。
OPTIMIZE TABLE語句被寫入到二進(jìn)制日志中,除非使用了自選的NO_WRITE_TO_BINLOG關(guān)鍵詞(或其別名LOCAL)。已經(jīng)這么做了,因此,用于 MySQL服務(wù)器的OPTIMIZE TABLE命令的作用相當(dāng)于一個(gè)復(fù)制主服務(wù)器,在默認(rèn)情況下,這些命令將被復(fù)制到復(fù)制從屬服務(wù)器中。
- 實(shí)現(xiàn)MySQL定時(shí)批量檢查表repair和優(yōu)化表optimize table的shell腳本
- mysql下優(yōu)化表和修復(fù)表命令使用說明(REPAIR TABLE和OPTIMIZE TABLE)
- Mysql數(shù)據(jù)庫之索引優(yōu)化
- Mysql性能優(yōu)化案例 - 覆蓋索引分享
- 關(guān)于MySQL 優(yōu)化的100個(gè)的建議
- MySQL查詢優(yōu)化的5個(gè)實(shí)用技巧
- mysql性能優(yōu)化之索引優(yōu)化
- MySQL數(shù)據(jù)庫修復(fù)方法(MyISAM/InnoDB)
- MySQL數(shù)據(jù)庫表修復(fù) MyISAM
- 教您修復(fù)mysql數(shù)據(jù)庫的方法
- MySQL實(shí)現(xiàn)批量檢查表并進(jìn)行repair與optimize的方法
相關(guān)文章
MySQL實(shí)現(xiàn)類似于connect_by_isleaf的功能MySQL方法或存儲過程
這篇文章主要介紹了MySQL實(shí)現(xiàn)類似于connect_by_isleaf的功能MySQL方法或存儲過程,需要的朋友可以參考下2017-02-02MySQL 實(shí)現(xiàn)雙向復(fù)制的方法指南
這篇文章主要介紹了MySQL 實(shí)現(xiàn)雙向復(fù)制的方法指南,本文包括:主機(jī)配置,從機(jī)配置,建立主-從復(fù)制,建立雙向復(fù)制,需要的朋友可以參考下2015-03-03Mysql誤刪數(shù)據(jù)解決方案及kill語句原理
這篇文章主要介紹了Mysql誤刪數(shù)據(jù)解決方案及kill語句原理,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-09-09mysql實(shí)現(xiàn)批量修改字段null值改為空字符串
這篇文章主要介紹了mysql實(shí)現(xiàn)批量修改字段null值改為空字符串,具有很好的參考價(jià)值,希望對大家有所幫助。2022-08-08