mysql data free 很大_为什么MySQL的data_free大于数据和索引的组合?
我假设您使用的是InnoDB,因为它是MySQL 5.5中的默认存储引擎.
InnoDB表空间在插入数据时会增长,但删除数据时文件不会缩小.因此,例如,如果您插入100万行,然后删除它们,该文件将有很多物理分配的空间,但不再使用.如果可以再次增加表空间文件,InnoDB将重新使用该空间.
此外,即使您不删除,也可能存在一些“浪费”的空间,因为当表空间文件的大小增加时,它们会被一大块页面扩展,这些页面由配置选项innodb_autoextend_increment(以兆字节为单位)决定.在这些页面被数据填充之前,它们是可用空间.
InnoDB报告的Data_free是中心表空间文件中空页“浪费”的空间量.它与NULL值无关,它与没有行的数据页有关.
此外,在MySQL 5.5中,默认情况下所有表共享一个名为ibdata的中央表空间.此表空间中所有表的data_Free将报告相同的数字,即整个表空间中空闲页面的空间量,而不仅仅是一个表.
您还可以为每个表分配一个单独的表空间(innodb_file_per_table = 1),对于单独表空间中的表,您将看到data_free的每个表的不同值.
Data_free仅报告完全空的扩展区留下的空间(扩展区是一个等于1MB的页面块).您会注意到data_free始终是1MB的倍数.较小的空闲页面块不计入data_free,也不计算部分填充的页面.所以“浪费”的空间可能要大得多,但我们无从知晓.