回收数据库表的空间

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 ;

原文地址:https://www.cnblogs.com/chenrenshui/p/8541858.html