1、创建一个存储过程
2、先获取该数据库中所有表名
3、使用optimize table回收空间
4、执行该存储过程(CALL recycle_interspace)
DELIMITER $$
CREATE PROCEDURE `recycle_interspace`()
BEGIN
DECLARE row_table_name VARCHAR(90);
DECLARE ergodic INT DEFAULT 1;
DECLARE getcategory CURSOR FOR SELECT table_name FROM information_schema.tables WHERE table_schema=‘数据库名‘;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET ergodic:=0;
OPEN getcategory;
/**
开始回收表的空间。
使用optimize table来回收空间,但这个操作会锁表影响业务,如果确认回收,建议在业务低峰期进行操作。
*/
REPEAT
FETCH getcategory INTO row_table_name;
SET @csql=CONCAT(‘ OPTIMIZE TABLE ‘,row_table_name,‘;‘);
PREPARE create_stmt FROM @csql;
EXECUTE create_stmt;
UNTIL ergodic=0 END REPEAT;
CLOSE getcategory;
END$$
DELIMITER ;