在使用mysql的時候有時候,可能會發現儘管一張表刪除了許多資料,但是這張表表的資料檔案和索引檔案卻奇怪的沒有變小。這是因為mysql在刪除資料(特別是有text和blob)的時候,會留下許多的資料空洞,這些空洞會佔據原來資料的空間,所以檔案的大小沒有改變。這些空洞在以後插入資料的時候可能會被再度利用起來,當然也有可能一直存在。這種空洞不僅額外增加了儲存代價,同時也因為資料碎片化降低了表的掃瞄效率。
使用場景
:如果您已經刪除了表的一大部分,或者如果您已經對含有可變長度行的表(含有varchar, blob或text列的表)進行了很多更改,則應使用optimize table。被刪除的記錄被保持在鏈結清單中,後續的insert操作會重新使用舊的記錄位置。您可以使用optimize table來重新
利用未使用的空間,並整理資料檔案的碎片。【當您的庫中刪除了大量的資料後,您可能會發現資料檔案尺寸並沒有減小。這是因為刪除操作後在資料檔案中留下碎片所致。
在多數的設定中,您根本不需要執行optimize table。即使您對可變長度的行進行了大量的更新,您也不需要經常執行,每週一次或每月一次即可,只對特定的表執行。
optimize table只對myisam, bdb和innodb表起作用。
對於bdb表,optimize table目前被對映到analyze table上。對於innodb表,optimize table被對映到alter table上,這會重建表。重建操作能更新索引統計資料並釋放成簇索引中的未使用的空間。
注意:在optimize table執行過程中,mysql會鎖定表。
對於myisam可以直接使用 optimize table table.name, 當是innodb引擎時,會報「table does not support optimize, doing recreate + analyze instead」,一般情況下,由myisam轉成innodb,會用alter table table.name engine='innodb'進行轉換,優化也可以用這個。所以當是innodb引擎時我們就用alter table table.name engine='innodb'來代替optimize做優化就可以。
檢視前後效果可以使用show table status命令,例如show table status from [database] like '[table_name]';返回結果中的data_free即為空洞所佔據的儲存空間。
MySQL中optimize的作用
mysql執行命令delete語句時,如果包括where條件,並不會真正的把資料從表中刪除,而是將資料轉換成了碎片,通過下面的命令可以檢視表中的碎片數量和索引等資訊 查詢結果中 index length 代表索引的數量 data free 代表碎片數量 然後執行下面命令進行優化整理 mysql op...
pytorch實現優化optimize
集中不同的優化方式 import torch import torch.utils.data as data import torch.nn.functional as f from torch.autograd import variable import matplotlib.pyplot as...
solr的optimize 的作用
今天在研究公司搜尋這一塊 的時候,看到了solrserve呼叫optimize 研究下這個optimize 的作用,如下 long st system.currenttimemillis solrserver server solrserve ctory.get constants.master 禁...