MySql 表的Optimize 優(yōu)化

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

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容