【问题标题】:Mysql performance: Delete vs Delete + OptimizeMysql 性能:删除 vs 删除 + 优化
【发布时间】:2016-10-06 04:03:23
【问题描述】:

我有一个表女巫是我系统的核心,显示给我的客户的所有结果都存储在那里。它增长得相当快,所以我应该每 3 小时删除一次早于 X 的记录以提高性能。

只删除这些记录就足够了吗,还是应该在删除后运行Optimize table?

我正在考虑每 3 小时删除一次,并且每天晚上只运行一次优化,但我不确定仅删除是否足以提高性能。

【问题讨论】:

  • 如果你有一个自动增量 id 作为主键,我怀疑你会看到任何差异(它可能取决于你拥有和使用的其他索引)。你当然可以只测试它,因为 5.7.4 optimize table 不会再锁定,它也不会造成太大的伤害(它当然仍然会使用 i/o),所以你可以双向使用。但我想一般来说我只会在正常的夜间维护期间这样做(当然不知道你的具体设置)。
  • 我会为此使用event。将事件视为计划的重复存储过程,没有 cron 的麻烦。他们已经确定并忘记了。因此,忘记他们执行是不利的。时不时地提醒自己:“哦,我忘记了,我有活动这样做。”

标签: mysql performance optimization


【解决方案1】:

如果您使用 InnoDB,请不要打扰OPTIMIZE TABLE;这不值得。

如果您总是删除“最旧”的行,那么有一种更快、更有效的方法来执行此操作。而且它本质上不需要OPTIMIZE。按日期和DROP PARTITION 对表进行分区。每个分区将是单独的结构;因此删除一个分区不会对表的其余部分产生碎片。

更多详情请参阅my blog。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-01-09
    • 2010-12-31
    • 2012-07-14
    • 1970-01-01
    • 2015-08-06
    • 1970-01-01
    • 2016-10-25
    • 2011-06-23
    相关资源
    最近更新 更多