MySQL 删除 space 发布

MySQL DELETE space release

我了解到在mysql中执行DELETE sql不会释放space,所以我做了一个实验。

在实验过程中,我发现当我的数据量很大时(大约20000行),我删除了一半的行,数据长度并没有减少。 但是当我的数据大小约为 1000 行时,我尝试删除一半的行。没想到数据长度会减少。

真是一头雾水。我对这个问题进行了很多搜索,但一无所获。什么原因?

我的MySQL版本是5.6

InnoDB table 统计数据不会在您每次删除时更新。因此 data_lengthindex_lengthrowsaverage_row_lengthdata_free 可能无法始终描述 table 的精确状态。

您可能想阅读:

即使更新了 table 统计数据,它们也不准确。它们是基于 table.

的有限样本的估计

还应该提到的是,tablespace 文件的大小保持在其高水位线,即使 data_length 已减小。不同之处在于 space 是文件系统中文件的一部分,但它不再被数据或索引占用。在进一步扩展文件之前,InnoDB 应该在 tablespace 中重用 "free" space。