English 中文(简体)
被删除的行占用的空间会被重新使用吗?
原标题:
  • 时间:2009-03-11 12:11:40
  •  标签:

我已经读过多次,在MySQL的InnoDB表中删除一行后,它的空间不会被重用,因此如果您向表中插入大量数据然后定期删除某些行,则表将在磁盘上使用更多的空间,就好像这些行根本没有被删除一样。

最近有人告诉我,尽管删除的行占用的空间被重复使用,但只有在完成一些交易之后,甚至那样也不是完全的。我现在很困惑。

有人可以帮我理解这个吗?我需要向InnoDB表中插入大量记录,然后每隔X分钟,我需要删除超过Y分钟的记录。我在这里是否有不断增长的InnoDB表的问题,还是这种担心是多虑了?

最佳回答

这是偏执狂:)

DB 的大小不会不必要地增加,但出于性能问题,空间也不会被释放。

你最有可能听到的是,如果你删除了记录,空间不会返还给操作系统。相反,它会被保留为空闲空间供数据库以后重复使用。

这是因为:

  • DB needs to have some HD space to save its data; if it doesn t have any space, it reserves some empty space at first.
  • When you insert a new row, a piece of that space is used.
  • When you run out of free space, a new block is reserved, and so on.
  • Now, when you delete some rows, in order to prevent reserving more and more blocks, its space is kept free but never given back to the Operating System, so you can use it again later without any need of reserving new blocks.

正如您所看到的,空间确实被重复使用,但从未返还。这是您问题的关键点。

问题回答

在InnoDB中,没有实用的方法来释放空间。

当你使用巨大的表格(在我的情况下它们超过250GB)时,所有这些方法都变得不切实际,你必须保持删除记录以获得更好的性能。

你需要认真考虑一下,你的硬盘是否有足够的空间来执行上述功能之一(在我的情况下,我认为1TB对于所有这些操作来说是不够的)。

使用Innotab表格(以及MySQL本身),如果有严重的数据库大小,选项相当有限。





相关问题
热门标签