我已经读过多次,在MySQL的InnoDB表中删除一行后,它的空间不会被重用,因此如果您向表中插入大量数据然后定期删除某些行,则表将在磁盘上使用更多的空间,就好像这些行根本没有被删除一样。
最近有人告诉我,尽管删除的行占用的空间被重复使用,但只有在完成一些交易之后,甚至那样也不是完全的。我现在很困惑。
有人可以帮我理解这个吗?我需要向InnoDB表中插入大量记录,然后每隔X分钟,我需要删除超过Y分钟的记录。我在这里是否有不断增长的InnoDB表的问题,还是这种担心是多虑了?
我已经读过多次,在MySQL的InnoDB表中删除一行后,它的空间不会被重用,因此如果您向表中插入大量数据然后定期删除某些行,则表将在磁盘上使用更多的空间,就好像这些行根本没有被删除一样。
最近有人告诉我,尽管删除的行占用的空间被重复使用,但只有在完成一些交易之后,甚至那样也不是完全的。我现在很困惑。
有人可以帮我理解这个吗?我需要向InnoDB表中插入大量记录,然后每隔X分钟,我需要删除超过Y分钟的记录。我在这里是否有不断增长的InnoDB表的问题,还是这种担心是多虑了?
这是偏执狂:)
DB 的大小不会不必要地增加,但出于性能问题,空间也不会被释放。
你最有可能听到的是,如果你删除了记录,空间不会返还给操作系统。相反,它会被保留为空闲空间供数据库以后重复使用。
这是因为:
正如您所看到的,空间确实被重复使用,但从未返还。这是您问题的关键点。
在InnoDB中,没有实用的方法来释放空间。
当你使用巨大的表格(在我的情况下它们超过250GB)时,所有这些方法都变得不切实际,你必须保持删除记录以获得更好的性能。
你需要认真考虑一下,你的硬盘是否有足够的空间来执行上述功能之一(在我的情况下,我认为1TB对于所有这些操作来说是不够的)。
使用Innotab表格(以及MySQL本身),如果有严重的数据库大小,选项相当有限。