回收数据库表的空间

Posted Beautiful program

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了回收数据库表的空间相关的知识,希望对你有一定的参考价值。

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 ;

以上是关于回收数据库表的空间的主要内容,如果未能解决你的问题,请参考以下文章

如何减少DB上一个表的Unused空间

Oracle 删除表空间回收磁盘空间

Oracle 删除表空间回收磁盘空间

回收数据库表空间的一个思路

linux怎么修改mysql数据库临时表空间大小

怎么修改mysql数据库临时表空间大小