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 ;

版权声明:本文为chenrenshui原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/chenrenshui/p/8541858.html