前言 當對MySQL進行大量的增刪改操作的時候,很容易產(chǎn)生一些碎片,這些碎片占據(jù)著空間,所以可能會出現(xiàn)刪除很多數(shù)據(jù)后,數(shù)據(jù)文件大小變化不大的現(xiàn)象。當然新插入的數(shù)據(jù)仍然會利用這些碎片。但過多的碎片,對數(shù)據(jù)的插入操作是有一定影響的,此時,我們可以通
當對MySQL進行大量的增刪改操作的時候,很容易產(chǎn)生一些碎片,這些碎片占據(jù)著空間,所以可能會出現(xiàn)刪除很多數(shù)據(jù)后,數(shù)據(jù)文件大小變化不大的現(xiàn)象。當然新插入的數(shù)據(jù)仍然會利用這些碎片。但過多的碎片,對數(shù)據(jù)的插入操作是有一定影響的,此時,我們可以通過optimize來對表的優(yōu)化。
為了更加直觀的看到數(shù)據(jù)碎片,Mysql可以使用如下命令查看
show table status [like table_name]
如下圖
data_free選項代表數(shù)據(jù)碎片。
針對MySQL的不同數(shù)據(jù)庫存儲引擎,在optimize使用清除碎片,回收閑置的數(shù)據(jù)庫空間,把分散存儲(fragmented)的數(shù)據(jù)和索引重新挪到一起(defragmentation),對I/O速度有好處。
當然optimize在對表進行操作的時候,會加鎖,所以不宜經(jīng)常在程序中調(diào)用。
針對MyISAM表,直接使用如下命令進行優(yōu)化
optimize table table1[,table2][,table3]
如果同時優(yōu)化多個表可以使用逗號分隔。
下面優(yōu)化dede_member_vhistory表,可以看出,優(yōu)化后data_free值為0。
#InnoDB存儲引擎
InnoDB引擎的表分為獨享表空間和同享表空間的表,我們可以通過show variables like ‘innodb_file_per_table’;來查看是否開啟獨享表空間。
我本地是開啟了獨享表空間的。此時是無法對表進行optimize操作的,如果操作,會返回如圖信息,最后的一條Table does not support optimize, doing recreate + analyze instead。因為該結構下刪除了大量的行,此時索引會重組并且會釋放相應的空間因此不必優(yōu)化。
聲明:本網(wǎng)頁內(nèi)容旨在傳播知識,若有侵權等問題請及時與本網(wǎng)聯(lián)系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com