1、optimize優(yōu)化原理??
?????對mysql進行大量增刪改操作,磁盤上的空間沒有被立即收回(數(shù)據(jù)空間、索引位),而是等待新的數(shù)據(jù)來填充空缺
????-- 這些空間可以被后續(xù)的insert操作利用,但如果記錄是變長的,那么不是所有的空間都能被充分利用
????-- 形成碎片,影響磁盤IO
????optimize可以把分散(fragmented)存儲的數(shù)據(jù)重新挪到一起(defragmentation),清除碎片,回收閑置的數(shù)據(jù)庫空間
????對于MyISAM表,OPTIMIZE TABLE按如下方式操作:
? ????? 1. 如果表已經(jīng)刪除或分解了行,則修復表。
2. 如果未對索引頁進行分類,則進行分類。
3. 如果表的統(tǒng)計數(shù)據(jù)沒有更新(并且通過對索引進行分類不能實現(xiàn)修復),則進行更新。
????對于BDB表,OPTIMIZE TABLE目前被映射到ANALYZE TABLE上
????對于InnoDB表,OPTIMIZE TABLE被映射到ALTER TABLE上,這會重建表。重建操作能更新索引統(tǒng)計數(shù)據(jù)并釋放成簇索引中的未使用的空間。請參見13.5.2.1節(jié),“ANALYZE TABLE語法”。使用?skip-new或?safe-mode選項可以啟動mysqld。
2、限制
????OPTIMIZE TABLE只對MyISAM, BDB和InnoDB表起作用
????這個操作會使MySql鎖定表
????InnoDB引擎的表分為共享表空間和獨享表空間表,可以通過show variables like 'innodb_file_per_table'來查看是否開啟獨享表空間。 獨享表空間的表是無法進行optimize操作的, 因為獨享表空間的表當數(shù)據(jù)刪除時會重組索引并釋放對應的空間
3、實踐
????-- 不需要經(jīng)常運行,刪除大量數(shù)據(jù)、更新大量變長數(shù)據(jù)時也僅僅需要每周后者一月運行一次
參考:
http://blog.51yip.com/mysql/1222.html
https://blog.csdn.net/hsd2012/article/details/51485250
http://www.cnblogs.com/sunss/archive/2010/09/14/1825721.html