1. 程式人生 > >為什麼表文件刪掉一半,表文件大小不變?

為什麼表文件刪掉一半,表文件大小不變?

一:引數innodb_per_file_table :推薦預設設定為on ,5.6.6之後預設的設定也是這樣,意思是將表資料單獨儲存在.idb字尾的檔案中。

如果執行drop table 可以刪除表資料。

二:執行delete 語句刪除了表資料,但是磁碟空間卻沒有變小。

原因:行空間可以複用,沒有釋放,如果一個頁的資料都被清空,那麼也就都可以複用。

如果表中資料按照自增主鍵插入,空間就比較連續。

如果對錶中資料由頻繁的增加,刪除操作,就會出現很多空洞

解決辦法:從新建表

這是5.5之前

 

這是5.6 之後:

 

上圖是online 的實現原理。

alter table t add FULLTEXT(field_name);
這條語句會阻塞增刪改操作。

要理解online 和inplace 倆種機制,概念。

是online 就一定 inplace, 是inplace 不一定 online .比如上邊的語句就不是online

 

optimize talbe 又是重建表,又是 mdl讀鎖,analyze table ,不是重建表,加了mdl讀鎖,alter table