我已经多次读过你在MySQL中的InnoDB表中删除一行后,它的空间没有被重用,所以如果你把很多INSERT放到一个表中然后定期删除一些行,那么表将使用越来越多的空间磁盘,好像根本没有删除行.
最近我被告知,删除行占用的空间会被重用,但只有在某些事务完成后才会被重新使用 - 不完全.我现在很困惑.
有人可以帮我理解这个吗?我需要在InnoDB表中执行大量的INSERT,然后每隔X分钟我需要删除超过Y分钟的记录.我在这里有一个不断增长的InnoDB表的问题,还是偏执狂?
这是偏执狂:)
数据库的大小不会不必要地增加,但是对于性能问题,空间也没有被释放.
您最常听到的是,如果删除记录,则不会将空间返回给操作系统.相反,它被保留为一个空的空间供DB在之后重复使用.
这是因为:
数据库需要有一些高清空间来保存数据; 如果它没有任何空间,它首先会保留一些空的空间.
插入新行时,将使用该空间的一部分.
当用完可用空间时,会保留一个新块,依此类推.
现在,当您删除某些行时,为了防止保留越来越多的块,它的空间保持空闲但从未返回到操作系统,因此您可以在以后再次使用它而无需保留新块.
正如您所看到的,空间被重用,但永远不会被回馈.这是你问题的关键点.