Mysql优化之optimize table

起因

出于于性能考虑,生产上采用冷热库的方式,热库中保存最近的数据,每隔一段时间自动备份到冷库中并从热库中删除。但时间久了之后,就会发现磁盘占用量越来越大。主要原因就是delete语句只是将记录的位置标记为“可复用”,但磁盘空间并不会直接回收。

解决方案

使用optimize table命令可以解决此问题,optimize table可以提高查询性能、减少数据碎片,如:

optimize table userinfo;

我们可以通过:

show table status from mydb like 'userinfo'

来查看,其中的data_free即为碎片空间,optiomize table主要进行了一下几个步骤:

  1. 创建临时表:与原表结构相同;
  2. 复制数据:将原表数据复制到临时表中;
  3. 优化数表:复制时,MySQL会重新整理和重组数据,去除碎片,提高数据连续性;
  4. 重命名表:将临时表重命名为原表。

不过,仅InnoDB和MyISAM引擎支持该语句。同时需要注意的是optimize table可能会导致锁表和资源抢占,所以不建议在业务高峰期处理。

posted @ 2024-03-13 15:59  猫探长  阅读(849)  评论(0编辑  收藏  举报