【发布时间】:2016-02-03 09:24:42
【问题描述】:
我有一个每周脚本,它从我们的实时数据库中移动数据并将其放入我们的存档数据库,然后删除它刚刚从实时数据库中存档的数据。由于这是一个相当大的删除(大约 10% 的表被修剪),我想我应该在删除后运行 OPTIMIZE TABLE。
但是,我正在从 mysql 文档中阅读此内容,但我不知道如何解释它: http://dev.mysql.com/doc/refman/5.1/en/optimize-table.html
"如果您删除了表的大部分内容或对具有可变长度行的表(具有 VARCHAR、VARBINARY、BLOB 或 TEXT 列的表)进行了许多更改,则应使用 OPTIMIZE TABLE。已删除行在链表中维护,随后的 INSERT 操作重用旧行位置。您可以使用 OPTIMIZE TABLE 回收未使用的空间并对数据文件进行碎片整理。"
第一句话对我来说是模棱两可的。这是否意味着您应该在以下情况下运行它: A)您删除了具有可变长度行的表的大部分,或者您对具有可变长度行的表进行了许多更改 或者 B)您删除了 ANY 表的大部分内容,或者您对具有可变长度行的表进行了许多更改
这有意义吗?所以如果我的表没有 VAR 列,我还需要运行它吗?
当我们谈到这个主题时 - 是否有任何指标告诉我一张桌子已经成熟,可以进行 OPTIMIZE 调用了?
另外,我读到这个http://www.xaprb.com/blog/2010/02/07/how-often-should-you-use-optimize-table/ 说运行 OPTIMIZE 表只对主键有用。如果我的大部分选择来自其他索引,我是否只是在具有代理键的表上浪费精力?
非常感谢!
【问题讨论】:
标签: mysql optimization