每当我们向其中插入数据时,MySQL的两个InnoDB表就会碎片化。
之后,当我使用optimize table命令时,它会被碎片整理。
有没有办法避免碎片,因为我想在表中添加数千行?
答案 0 :(得分:1)
BTrees自然倾向于仅满69%。和它一起生活。
此外,可用的统计信息(SHOW TABLE STATUS
和information_schema
中的等效指标)可能会吓到您。 Data_free
通常是1MB的倍数。和它一起生活。而这只是它暴露的碎片!
对InnoDB进行碎片整理主要是浪费时间,因为它会因INSERT / DELETE / UPDATE而迅速碎片化。甚至SELECT!
为什么SELECT
?挂起可能被其他事务使用的行,以遵循“事务隔离”的语义规则。
OPTIMIZE TABLE
已将某些用于MyISAM表。我确定了2个用例,其中每月碎片整理是有用的(在多个安装中可能有5000个表)。我还没有看到在InnoDB中使用它的重要用例。