为什么表文件删掉一半,表文件大小不变?

一:参数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

猜你喜欢

转载自www.cnblogs.com/hanguocai/p/10126139.html