如何对 mysql table 进行碎片整理

how to perform defragmentation on mysql table

每当我们向其中插入数据时,MySQL 的两个 InnoDB table 就会变得支离破碎。

之后,当我使用优化 table 命令时,它会进行碎片整理。

有什么方法可以避免碎片化,因为我想将数千行添加到 table?

BTrees 自然倾向于只有 69% 满。接受它。

此外,可用的统计数据(SHOW TABLE STATUSinformation_schema 中的等效指标)可能会吓到您。 Data_free 通常是 1MB 的倍数。忍受它。这就是它暴露的碎片!

InnoDB 的碎片整理主要是浪费时间,因为 INSERT/DELETE/UPDATE 它会很快变得碎片化。甚至 SELECT!

为什么 SELECT?挂在其他事务可能使用的行上以遵循 "transaction isolation".

的语义规则

OPTIMIZE TABLE 一些 用于 MyISAM 表。我确定了 2 个每月碎片整理有用的用例(在多个安装中可能有 5000 个表)。我还没有看到在 InnoDB 中这样做的重要用例。