随着MySQL的使用,或者短时间内delete了大量的数据,MySQL的数据表就有可能存在大量的数据碎片,因为这些数据碎片的存在,所以即便是delete了数据,数据占用的存储空间并不会释放,如果想释放这部分存储空间,可以通过OPTIMIZE TABLE命令对表进行整理
OPTIMIZE TABLE `test1`;
OPTIMIZE TABLE只能操作一张表,如果我们想整库都这么操作的话,则可以手动执行一下这个SQL就可以获取到所有表的OPTIMIZE TABLE命令,然后复制结果执行即可。
SELECT CONCAT('OPTIMIZE TABLE `', table_name, '`;') AS optimize_statement
FROM information_schema.tables
WHERE table_schema = 'your_database_name' AND (engine = 'MyISAM' OR engine = 'InnoDB');
注意:OPTIMIZE TABLE是个耗时且会锁表的命令,所以执行需谨慎,正常情况下不需要做这个操作。