MySQL-重建分区与优化分区

MySQL-重建分区与优化分区,mysql,optimization,partitioning,Mysql,Optimization,Partitioning,我在MySQL 5.1.41中对表进行了分区,这些表包含大量数据。最近,我删除了很多数据,导致了大约500GB的碎片,但是分区中有很多数据 为了向操作系统回收空间,我必须对分区进行反分段。我参考了MySQL文档,它让我对以下语句感到困惑 重建分区:重建分区;这与删除分区中存储的所有记录的效果相同,然后 重新插入它们。这对于碎片整理非常有用 优化分区:如果从分区中删除了大量行,或者对分区进行了许多更改 具有可变长度行(即具有VARCHAR、BLOB或 文本列),您可以使用ALTER TABLE。。

我在MySQL 5.1.41中对表进行了分区,这些表包含大量数据。最近,我删除了很多数据,导致了大约500GB的碎片,但是分区中有很多数据

为了向操作系统回收空间,我必须对分区进行反分段。我参考了MySQL文档,它让我对以下语句感到困惑

重建分区:重建分区;这与删除分区中存储的所有记录的效果相同,然后 重新插入它们。这对于碎片整理非常有用

优化分区:如果从分区中删除了大量行,或者对分区进行了许多更改 具有可变长度行(即具有VARCHAR、BLOB或 文本列),您可以使用ALTER TABLE。。。优化分区以 回收所有未使用的空间并对分区数据文件进行碎片整理

我尝试了这两种方法,并观察到有时“重建”发生得更快,有时“优化”。我运行这些命令的每个分区都有数百万到数十亿条记录。我知道MySQL对上述每一条语句都做了什么

是否需要根据分区中的行数应用它们?如果是,我可以使用“优化”和“重建”的行数是多少

另外,使用MyISAM或InnoDB哪个更好?(答案会有所不同。)

对于MyISAM,每个分区的重建/重新组织/优化工作大致相同

对于InnoDB,
优化分区
重建所有分区。所以,如果你想一次一个分区的话,不要用这个<代码>将分区的分区重新组织为相同的分区定义应仅作用于一个分区。我建议

除非至少有一百万行,否则通常不值得使用分区。此外,按范围
是我发现的唯一具有性能优势的表单

分区的主要用途可能是在时间序列中删除“旧”数据<代码>按范围分区
每周或每月分区可以让您非常高效地
删除分区
,而不是
删除


(我的答案适用于5.7的所有版本,而不仅仅是你的古董5.1。)

嘿,瑞克!谢谢你的回答。但那不是我要找的。我引用了你的博客文章,它只关注范围分区。我的表是列表分区的。也许我应该在我的问题中说明这一点。它们是MyISAM存储引擎的一部分。我需要知道应该为我的场景应用哪种维护策略。我跑步改变。。。在单个分区上重建/优化。我需要知道是否应该根据分区中的行数进行重建和优化,以及哪个更快完成…:)<代码>列表如果使用类似于
范围
,则可能很有用。(
HASH
可能总是无用的
)至于
REBUILD
/
OPTIMIZE`--两者(在MyISAM上)的作用基本相同--复制数据并重建索引。因此,它们很可能需要相同的时间。