MySQL中optimize優化表_MySQL

前言

當對mysql進行大量的增刪改操作的時候,很容易產生一些碎片,這些碎片占據著空間,所以可能會出現刪除很多數據后,數據文件大小變化不大的現象。當然新插入的數據仍然會利用這些碎片。但過多的碎片,對數據的插入操作是有一定影響的,此時,我們可以通過optimize來對表的優化。

為了更加直觀的看到數據碎片,Mysql可以使用如下命令查看

show table status [like table_name]

如下圖

?

MySQL中optimize優化表_MySQL

?

data_free選項代表數據碎片。

針對MySQL的不同數據庫存儲引擎,在optimize使用清除碎片,回收閑置的數據庫空間,把分散存儲(fragmented)的數據和索引重新挪到一起(defragmentation),對I/O速度有好處。

當然optimize在對表進行操作的時候,會加鎖,所以不宜經常在程序中調用。

MyISAM存儲引擎

針對MyISAM表,直接使用如下命令進行優化

optimize table table1[,table2][,table3]

如果同時優化多個表可以使用逗號分隔。

下面優化dede_member_vhistory表,可以看出,優化后data_free值為0。

?

MySQL中optimize優化表_MySQL

?

#InnoDB存儲引擎

InnoDB引擎的表分為獨享表空間和同享表空間的表,我們可以通過show variables like ‘innodb_file_per_table’;來查看是否開啟獨享表空間。

我本地是開啟了獨享表空間的。此時是無法對表進行optimize操作的,如果操作,會返回如圖信息,最后的一條Table does not support optimize, doing recreate + analyze instead。因為該結構下刪除了大量的行,此時索引會重組并且會釋放相應的空間因此不必優化。

?

MySQL中optimize優化表_MySQL
? 版權聲明
THE END
喜歡就支持一下吧
點贊11 分享