在我的MySQL数据库中,我看到这些统计信息
Type Usage
Data 16,384 Bytes
Index 32,768 Bytes
Overhead 405,0 MB
Effective -424,624,128 Bytes
Total 49,152 Bytes
Run Code Online (Sandbox Code Playgroud)
当我尝试的命令check table,ALTER TABLE 'mytable' ENGINE = INNODB,OPTIMIZE TABLE,什么都不会发生的开销.
为什么没有发生任何事情,我应该担心,我什么时候该担心?我已经看到其他问题表明"当开销过大时要担心".什么太大了?
Ash*_*n A 12
PHPMyAdmin中的开销由SHOW TABLE STATUS返回的"Data_free"列计算.它实际上在MySQL文档中进行了解释:http: //dev.mysql.com/doc/refman/5.1/en/show-table-status.html
Data_free:已分配但未使用的字节数.
从MySQL 5.1.24开始,此信息也显示在InnoDB表中(之前,它位于Comment值中).InnoDB表报告表所属的表空间的可用空间.对于位于共享表空间中的表,这是共享表空间的可用空间.如果您使用多个表空间并且该表具有自己的表空间,则可用空间仅用于该表.可用空间表示完全免费的1MB范围减去安全边界的数量.即使可用空间显示为0,只要不需要分配新的扩展区,就可以插入行.
但是对于InnoDB来说,重要的是"InnoDB表报告表所属的表空间的可用空间.对于位于共享表空间中的表,这是共享表空间的可用空间." 因此,通过典型的InnoDB设置(未设置'innondb_file_per_table'),您将获得所有表的可用空间,而不是单个表.这可能是phpMyAdmin忽略/丢弃信息的原因,或者在Optimize表上没有任何反应.
您应该阅读这篇文章,该文章清楚地解释了如何优化innodb中的表格.
跑:
OPTIMIZE TABLE table_name;
Run Code Online (Sandbox Code Playgroud)
在您希望修复的每个表上 - 这应该减少开销.另一个选项是使用此命令:
/usr/bin/mysqlcheck --auto-repair --check --optimize --all-databases
Run Code Online (Sandbox Code Playgroud)
这将检查,修复和优化所有数据库中的所有表.