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