InnoDBはMySQL5.5のデフォルトのストレージエンジンであるため、使用していると思います。
InnoDBテーブルスペースは、データを挿入すると大きくなりますが、データを削除してもファイルは縮小しません。したがって、たとえば100万行を挿入してから削除すると、ファイルには物理的に割り当てられているが使用されなくなった多くのスペースが含まれます。 InnoDBは、可能であれば、テーブルスペースファイルを再度拡張する前に、そのスペースを再利用します。
また、削除しなくても、テーブルスペースファイルのサイズが大きくなると、構成オプションinnodb_autoextend_increment
によって決定されるページの大きなチャンクによって拡張されるため、「無駄な」スペースが発生する可能性があります。 メガバイト単位。それらのページがデータでいっぱいになるまで、それらは空き領域です。
InnoDBによって報告されるData_freeは、中央表領域ファイルの空のページで「浪費された」スペースの量です。 NULL値とは関係がなく、行がないデータページと関係があります。
さらに、MySQL 5.5では、デフォルトでは、すべてのテーブルがibdata
と呼ばれる1つの中央テーブルスペースを共有します。 。このテーブルスペース内のすべてのテーブルのdata_Freeは、同じ数値を報告します。これは、1つのテーブルだけでなく、テーブルスペース全体の空きページのスペースの量です。
テーブルごとに個別のテーブルスペースを割り当てることもできます(innodb_file_per_table=1
)、および個別のテーブルスペース内のテーブルの場合、data_freeのテーブルごとに異なる値が表示されます。
Data_freeは、完全に空のエクステントによって残されたスペースのみを報告します (エクステントは1MBに等しいページのブロックです)。 data_freeは常に1MBの倍数であることに気付くでしょう。空きページの小さいブロックはdata_freeにカウントされず、部分的に埋められたページもカウントされません。したがって、「無駄な」スペースはおそらくはるかに大きいですが、それを知る方法はありません。