小编use*_*788的帖子

如何优化 MySQL 中的 InnoDB 表

我一直在研究如何仅优化 MySQL 中的碎片表,并查看了有关优化表的这篇文章。它基本上对包含任何表的 information_schema 数据库执行查询,data_free > 0OPTIMIZE仅针对这些表构建 SQL 语句。我运行了这个查询,它确定了 148 个用于优化的表。所有标识的表都是 InnoDB 表。执行结果优化 SQL 脚本后,我重新运行原始脚本以识别碎片表,并在第一遍返回完全相同的表。

我看到过关于 InnoDB 表和OPTIMIZE命令的相互冲突的帖子。有人说这OPTIMIZE不适用于 InnoDB 表,您需要运行ALTER TABLE table_name ENGINE=INNODB. 其他人说在对 InnoDB 表执行时OPTIMIZE实际上调用了ALTER TABLE命令。考虑到这一点,我ALTER TABLE对标识为碎片化的 InnoDB 表之一运行了该命令 ( data_free > 0),并发现该表data_free之后没有更改。它仍然大于0。我也重新启动了MySQL并检查了它只是发现相同的结果。

现在,我们的组织中有几台运行 MySQL 5.5.29 的服务器,我对所有服务器进行了查询以识别任何 InnoDB 表,DATA_FREE=0 or NULL但没有返回。它们都大于零。

我还OPTIMIZE针对几个大于零的MyISAM表运行了该命令,DATA_FREE然后验证它是否为零。

任何人都可以为我解释一下吗?从 InnoDB 表中删除碎片的正确方法是什么?确定碎片化 InnoDB 表的正确方法是什么?

谢谢

mysql innodb optimization

10
推荐指数
1
解决办法
2万
查看次数

标签 统计

innodb ×1

mysql ×1

optimization ×1