mysql 清理空间碎片

1.OPTIMIZE TABLE

只对MyISAM,Archive,InnoDB,和NDB表起作用,尤其是MyISAM表的作用最为明显,对于MyISAM,Archive和NDB,OPTIMIZE TABLE被映射为analyze table xxx操作。此外,并不是所有表都需要进行碎片整理,一般只需要对包含上述可变长度的文本数据类型的表进行整理即可。另外,我们可以用mysqld --skip-new或者mysqld --safe-mode命令来重启MySQL以支持其他存储引擎,只不过这时候被映射为alter table xxx操作来实现;

2.alter table table_name engine=innodb;

MySQL5.7已经推荐对于InnoDB的table使用 alter table table_name engine=innodb;语句的方式来进行表碎片优化,也就是说其效果与OPTIMIZE TABLE test一样了。

 

查看数据库哪个表需要清理碎片

SELECT
concat(
'optimize table ',
table_schema,
'.',
table_name,
';'
),
data_free,
ENGINE
FROM
information_schema. TABLES
WHERE
data_free > 0
AND ENGINE != 'MEMORY';

 

查看指定表的碎片情况

show table status like 't_user'G

 

posted @ 2022-08-29 15:52  星云惊蛰  阅读(501)  评论(0)    收藏  举报