如何减少phpMyAdmin中显示的MySQL开销?

nha*_*man 10 mysql phpmyadmin

在我的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中的表格.


Gar*_*ies 8

跑:

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)

这将检查,修复和优化所有数据库中的所有表.