【问题标题】:MySQL DELETE space releaseMySQL DELETE 空间释放
【发布时间】:2020-04-19 00:53:26
【问题描述】:

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

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

这真是令人困惑。我对这个问题进行了很多搜索,但一无所获。是什么原因?

我的 MySQL 版本是 5.6

【问题讨论】:

  • 表是 InnoDB 吗? innodb_file_per_table的设置是什么?您如何衡量“发布”?

标签: mysql innodb information-schema


【解决方案1】:

InnoDB 表统计信息不会在您每次 DELETE 时更新。因此data_lengthindex_lengthrowsaverage_row_lengthdata_free 可能无法始终描述表的精确状态。

您可能想阅读:

即使在表格统计信息更新后,它们也不准确。它们是基于有限的表格样本的估计值。


还应该提到的是,表空间文件的大小保持在其高水位线,即使 data_length 减少了。不同之处在于文件系统上文件的一部分空间,但它不再被数据或索引占用。 InnoDB 应该在进一步扩展文件之前重用表空间中的“空闲”空间。

【讨论】:

  • stat更新后可能不准确,但这说明数据长度肯定减少了,和“delete不会释放空间”的冲突,真的很迷茫跨度>
  • @bjwzds - Data_free 和/或 Index_free 是否同时上涨?
  • Bill -- 我认为这些链接中的任何一个都与 Data_length 等无关。相反,它们仅适用于优化器统计信息。
  • 我认为长度数据与索引基数的其他抽样统计数据同时更新。参照。 dev.mysql.com/doc/refman/8.0/en/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多