mysql索引碎片整理 MysqL碎片整理優化

2021-10-17 19:28:18 字數 1190 閱讀 6581

先來說一下什麼是碎片,怎麼知道碎片有多大!

簡單的說,刪除資料必然會在資料檔案中造成不連續的空白空間,而當插入資料時,這些空白空間則會被利用起來.於是造成了資料的儲存位置不連續,以及物理儲存順序與理論上的排序順序不同,這種是資料碎片.實際上資料碎片分為兩種,一種是單行資料碎片,另一種是多行資料碎片.前者的意思就是一行資料,被分成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表碎片整理

1.首先檢視下表碎片資訊 其中 table schema指的是庫名,table name指的是表名,engine指的是儲存引擎,table rows指的是表裡存在行數,length指的是表和索引的總大小,data free指的是碎片大小 位元組 2.對於myisam儲存引擎使用的表,清理命令為 op...

MysqL碎片整理優化

先來說一下什麼是碎片,怎麼知道碎片有多大!簡單的說,刪除資料必然會在資料檔案中造成不連續的空白空間,而當插入資料時,這些空白空間則會被利用起來.於是造成了資料的儲存位置不連續,以及物理儲存順序與理論上的排序順序不同,這種是資料碎片.實際上資料碎片分為兩種,一種是單行資料碎片,另一種是多行資料碎片.前...