Mysql優化之optimize table

起因

出於於性能考慮,生產上採用冷熱庫的方式,熱庫中保存最近的數據,每隔一段時間自動備份到冷庫中並從熱庫中刪除。但時間久了之後,就會發現磁盤佔用量越來越大。主要原因就是delete語句只是將記錄的位置標記爲“可複用”,但磁盤空間並不會直接回收。

解決方案

使用optimize table命令可以解決此問題,optimize table可以提高查詢性能、減少數據碎片,如:

optimize table userinfo;

我們可以通過:

show table status from mydb like 'userinfo'

來查看,其中的data_free即爲碎片空間,optiomize table主要進行了一下幾個步驟:

  1. 創建臨時表:與原表結構相同;
  2. 複製數據:將原表數據複製到臨時表中;
  3. 優化數表:複製時,MySQL會重新整理和重組數據,去除碎片,提高數據連續性;
  4. 重命名錶:將臨時表重命名爲原表。

不過,僅InnoDB和MyISAM引擎支持該語句。同事需要注意的是optimize table可能會導致鎖表和資源搶佔,所以不建議在業務高峯期處理。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章