MySQL 处理某个idb表文件过大

Posted 莫让年华付水流

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySQL 处理某个idb表文件过大相关的知识,希望对你有一定的参考价值。

发现mysql 中一个表xxx只有6条数据,但idb空间却占了40G。
原因:MySQL执行命令delete语句时,如果包括where条件,并不会真正的把数据从表中删除,而是将数据转换成了碎片,通过下面的命令可以查看表中的碎片数量和索引等信息:
mysql>  show table status like  ‘table_name‘;

查询结果中:
Index_length 代表索引的数量
Data_free 代表碎片数量

然后执行下面命令进行优化整理:
mysql > optimize table table_name;

这里mysql给的提示是
Note>> Table does not support optimize, doing recreate + analyze instead
Status>> OK
也就是说 optimize table 对于innodb来说,无法作为a single operation,实际的操作是:
ALTER TABLE test.foo ENGINE=InnoDB;
ANALYZE TABLE test.foo;
MySQL5.7已经推荐对于InnoDB的table使用  alter table table_name engine=innodb;  语句的方式来进行表碎片优化。

注:optimize会进行锁表操作,所以进行优化时要避开表数据操作时间,避免影响正常业务的进行。

以上是关于MySQL 处理某个idb表文件过大的主要内容,如果未能解决你的问题,请参考以下文章

通过表的.frm和.idb文件备份MySQL表

mysql之frm,MYD,MYI.idb,par文件说明

转&参考MySQL利用frm和idb文件进行数据恢复

MySQL 8.0 恢复孤立文件每表ibd文件

mysql 使用idb文件恢复数据

共享表空间与独立表空间frm,MYD,MYI.idb,par文件说明