一个表的数据量有1000W条,那么查看这么表占据的硬盘空间时会发现,数据本身是300M,索引是200M

这个时候,删除掉500W条数据,这个时候数据本身150M,而索引还是200M左右

你删除数据时,mysql并不会回收,被已删除数据的占据的存储空间,以及索引位。

而是空在那里,而是等待新的数据来弥补这个空缺,这样就有一个缺少,如果一时半会,没有数据来填补这个空缺,那这样就太浪费资源了。

所以对于写比较频烦的表,要定期进行optimize,一个月一次,看实际情况而定了。

optimize table xxxxxx;

OPTIMIZE TABLE只对MyISAM, BDB和InnoDB表起作用。

注意,在OPTIMIZE TABLE运行过程中,MySQL会锁定表。

05-07 12:10