我已经多次读过你在MySQL中的InnoDB表中删除一行后,它的空间没有被重用,所以如果你把很多INSERT放到一个表中然后定期删除一些行,那么表会使用更多的磁盘上有更多空间,就好像根本没有删除行一样。
最近有人告诉我,删除的行所占用的空间会被重复使用,但只有在某些事务完成后才会被重新使用 - 不完全。我现在很困惑。
有人可以帮我理解这个吗?我需要在InnoDB表中执行大量的INSERT,然后每隔X分钟我需要删除超过Y分钟的记录。我在这里有一个不断增长的InnoDB表的问题,还是偏执狂?
答案 0 :(得分:32)
这是偏执狂:)
DB的大小不会不必要地增加,但是对于性能问题,空间也不会被释放。
您最常听到的内容是,如果您删除的记录中没有将返回给操作系统。相反,它被保留为一个空的空间供DB在之后重复使用。
这是因为:
正如您所看到的,空间被重复使用,但从未被回复。这是你问题的关键点。
答案 1 :(得分:2)
当您使用大表(在我的情况下,它们超过250GB)时,所有这些方法都变得不切实际,并且您必须让它们删除记录以提高性能。
你必须认真思考,你的硬盘上是否有足够的空间来执行上述功能之一(在我看来,我认为1TB不足以应对所有这些行为)
使用Innotab表(和mysql本身),如果数据库大小严重,则该选项相当有限。