首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL:优化表相对于myisamchk

MySQL:优化表相对于myisamchk
EN

Database Administration用户
提问于 2015-07-01 18:24:23
回答 1查看 2.8K关注 0票数 3

我有一个非常大的表(~50 to ),并定期从表中清除行,我希望运行OPTIMIZE TABLE来恢复空间。但是我没有足够的空间去运行它。如果我运行它,服务器将挂起,必须被杀死并重新启动,表被损坏,必须进行修复。我和我一起做的。

MySQL文档,我读到了以下内容:

若要合并碎片行并消除删除或更新行所造成的浪费空间,请在恢复模式下运行myisamchk : shell> myisamchk -r tbl_name,您可以使用OPTIMIZE TABLE语句以相同的方式优化表。OPTIMIZE TABLE进行表修复和密钥分析,并对索引树进行排序,以使键查找速度更快。在实用程序和服务器之间也不可能发生不必要的交互,因为当您使用OPTIMIZE TABLE时,服务器完成了所有的工作。

这是否意味着myisamchk -r -a -SOPTIMIZE TABLE做同样的事情?

如果他们做同样的事情,为什么myisamchk工作,但OPTIMIZE TABLE耗尽空间?

EN

回答 1

Database Administration用户

回答已采纳

发布于 2015-07-01 18:48:29

他们做同样的事情,但有区别和严重的危险。

以下是不同之处:

  • OPTIMIZE TABLE是在mysql客户机或mysql会话中完成的。
  • myisamchk是一个实用程序,而不是一个客户机。因此,没有表锁定安全措施。因此,您不应该在活动系统中运行myisamchk -r -a -S。否则,您可能会很快(实际上是瞬间)损坏MyISAM表。

您可以将MyISAM表移动到另一个文件夹,并对表文件运行myisamchk,而不受mysqld或其任何客户端连接的干扰。

其他差异

  • mysqld将创建临时表。
  • myisamchk可以找出它是需要制作临时表还是在适当的地方做事情。

更多信息

执行OPTIMIZE TABLE将完成表的完整副本。它会在引擎盖下这样做

代码语言:javascript
复制
ALTER TABLE mytable ENGINE=MyISAM;
ANALYZE TABLE mytable;

执行OPTIMIZE TABLE可以使临时表在/tmp中,而不是像myisamchk那样到位

请记住,tmpdir是映射到某个地方的。那就是空间可能会释放的地方。

票数 2
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/105702

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档