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

浙公网安备 33010602011771号