萬盛學電腦網

 萬盛學電腦網 >> 數據庫 >> mysql教程 >> mysql中optimize表命令測試例子

mysql中optimize表命令測試例子

今天對myiam數據表進行批量刪除後,發現空間沒有回收,查了資料後,發現要通過optimize table來回收空間

今天對myiam數據表進行批量刪除後,發現空間沒有回收,查了資料後,發現要通過optimize table來回收空間
測試如下,建立數據表:

 代碼如下 復制代碼 CREATE TABLE `ttext` (
`id` int(11) DEFAULT NULL,
`context` text
) ENGINE=MyISAM DEFAULT CHARSET=latin1
insert into ttext values( 1,’tiger1′),(2,’tiger2′),(3,’tiger3′);

然後重復執行insert into ttext select * from ttext;這樣重復灌數據,很快數據文件就達到240MB,這個時候,可以確認的是id為1的數據占據了1/3的空間,那麼接下來,可以刪除delete from ttext where id=1;
按正常的想法,這樣的操作後,空間應該有回收的,但是事實沒有。
OPTIMIZE TABLE should be used if you have deleted a large part of a
table or if you have made many changes to a table with variable-length
rows (tables that have VARCHAR, VARBINARY, BLOB, or TEXT columns).
You can use OPTIMIZE TABLE to
reclaim the unused space and to defragment the data file.
通過資料來看可以通過optimize table ttext來回收相應的空間。
繼續查看了官方手冊後發現,這個操作與表所用的引擎有很大的關系。
innodb表必須是使用獨立表空間的才行,其次在mysql5.1.27開始optimize table is also supported for partitioned tables.就是可以對分區表進行優化。
針對myisam引擎,使用optimize table 還有如下功能:
If the table has deleted or split rows, repair the table. [修復表]
If the index pages are not sorted, sort them. [索引未排序,會排序]
If the table’s statistics are not up to date (and the repair could not be accomplished by sorting the index), update them.[若表的統計信息不是最新的,更新它]

copyright © 萬盛學電腦網 all rights reserved