我们在MySQL中有一个拥有超过500 GB数据的数据库,目前正在清除数据和计数的过程中可能超过100万。正如我们所知道的那样,清除可能导致高度的碎片化,并会降低性能。此外,在清除数据较多的少数情况下,它可能会使现有索引不可用。
如果有人遇到这样的情况,请告诉我处理相同情况的最佳方法。
发布于 2015-06-07 03:11:48
不,删除不会显着地减缓剩余的速度。
不,索引永远不会变得“不可用”。
你在清洗什么?“旧数据”?如果是这样的话,那么PARTITION BY RANGE(TO_DAYS(...))是清除旧数据的极好方法。DROP PARTITION是“瞬时”的,确实会导致任何碎片。我的博客将详细介绍如何执行PARTITIONing,以及每日/每周/任何维护,包括示例代码。
如果不能以这种方式使用分区,那么无论发生什么碎片,都会陷入困境;500 If表上的OPTIMIZE TABLE将花费很长的时间。(有一个5.7版的“在线”版本,但可能还没有发布。)
你是INSERTing只在桌子的“末端”吗?除了清除之外,您没有做UPDATEs或DELETEs吗?如果两者都是,则有一种优化表或将表复制到分区表的方法.
它包括使用PRIMARY KEY遍历表,并一次复制多个行块。
为了进一步讨论,请提供SHOW CREATE TABLE并回答我提出的问题。
https://dba.stackexchange.com/questions/102320
复制相似问题