MYSQL optimize

optimize table 的作用

当您的库中删除了大量的数据后,您可能会发现数据文件尺寸并没有减小。这是因为删除操作后在数据文件中留下碎片所致。

提供了数据表优化的功能,可以去除删除操作后留下的数据文件碎片,减小文件尺寸,加快未来的读写操作。您只要在做完批量删除,或定期(如 每一两个月)进行一次数据表优化操作即可。

经过数据的反复写入和删除、修改,会有一些表空间不释放或者磁盘碎片存在,以及有报错提示,碎片一般经过optimize table操作会释放;您可通过升级磁盘,然后观察磁盘使用情况;升级等操作会触发迁移,也会进行数据库的重新导出、导入,释放磁盘的碎片,所以迁移后对应的磁盘占用空间显示变小,变小的部分即是对应长期使用导致的表的锁片。

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

解决碎片率

您也可以通过如下命令,直接释放磁盘碎片空间。

optimize table table_name;

alter table  table_name engine=innodb;

来整理空间碎片, 但这样操作会锁表, 还请您挑选业务低峰期或维护时间进行操作

显示各表的数据大小,索引大小,空间碎片大小

Select TABLE_SCHEMA,TABLE_NAME,DATA_LENGTH,INDEX_LENGTH,DATA_FREE
from information_schema.tables order by DATA_FREE desc;

统计数据大小,索引大小,空间碎片大小总和

select sum(DATA_LENGTH+INDEX_LENGTH+DATA_FREE)/1024/1024/1024 from information_schema.tables;