先來說一下什麼是碎片,怎麼知道碎片有多大!
簡單的說,刪除資料必然會在資料檔案中造成不連續的空白空間,而當插入資料時,這些空白空間則會被利用起來.於是造成了資料的儲存位置不連續,以及物理儲存順序與理論上的排序順序不同,這種是資料碎片.實際上資料碎片分為兩種,一種是單行資料碎片,另一種是多行資料碎片.前者的意思就是一行資料,被分成n個片段,儲存在n個位置.後者的就是多行資料並未按照邏輯上的順序排列.當有大量的刪除和插入操作時,必然會產生很多未使用的空白空間,這些空間就是多出來的額外空間.索引也是檔案資料,所以也會產生索引碎片,理由同上,大概就是順序紊亂的問題.engine 不同,optimize 的操作也不一樣的,myisam 因為索引和資料是分開的,所以 optimize 可以整理資料檔案,並重排索引。這樣不但會浪費空間,並且查詢速度也更慢。
解決方案:(切記,一定要在夜裡執行,表越大,越耗資源時間,不要頻繁修復,可以幾個月甚至一年修復一次,如果表頻繁被更改,可以按周/月來整理。)
檢視表碎片的方法
通過optimize table table_name 後再查詢一下結果如下
也可以觀察mysql的資料目錄儲存檔案data檔案大小,如myd
一、innodb儲存引擎清理碎片方法
alter table tablename engine=innodb二、myisam儲存引擎清理碎片方法
optimize 操作會暫時鎖住表,而且資料量越大,耗費的時間也越長,它畢竟不是簡單查詢操作.所以把 optimize 命令放在程式中是不妥當的,不管設定的命中率多低,當訪問量增大的時候,整體命中率也會上公升,這樣肯定會對程式的執行效率造成很大影響.比較好的方式就是做個 script,定期檢查mysql中 information_schema.tables欄位,檢視 data_free 字段,大於0話,就表示有碎片.指令碼多長時間執行一次,可以根據實際情況來定,比如每週跑一次.
optimize table table_name
MYSQL優化之碎片整理
mysql 優化之碎片整理 在mysql 中,我們經常會使用 varchar text blob 等可變長度的文字資料型別。不過,當我們使用這些資料型別之後,我們就不得不做一些額外的工作 mysql 資料表碎片整理。那麼,為什麼在使用這些資料型別之後,我們就要對 mysql 定期進行碎片整理呢?現在...
mysql索引碎片整理 MysqL碎片整理優化
先來說一下什麼是碎片,怎麼知道碎片有多大!簡單的說,刪除資料必然會在資料檔案中造成不連續的空白空間,而當插入資料時,這些空白空間則會被利用起來.於是造成了資料的儲存位置不連續,以及物理儲存順序與理論上的排序順序不同,這種是資料碎片.實際上資料碎片分為兩種,一種是單行資料碎片,另一種是多行資料碎片.前...
mysql碎片整理 提速 MysqL碎片整理優化
先來說一下什麼是碎片,怎麼知道碎片有多大!簡單的說,刪除資料必然會在資料檔案中造成不連續的空白空間,而當插入資料時,這些空白空間則會被利用起來.於是造成了資料的儲存位置不連續,以及物理儲存順序與理論上的排序順序不同,這種是資料碎片.實際上資料碎片分為兩種,一種是單行資料碎片,另一種是多行資料碎片.前...