InnoDBでTRUNCATEした時のibdファイル

古いInnoDBではテーブルをTRUNCATEしてもibdファイルは再利用用にのこるらしい

古いバージョンのInnoDBだとTRUNCATE TABLEしてもデータファイルのサイズが減らない件 - shimxmemo

  • 検証

テーブル作成して適当にデータを入れる

CREATE TABLE test (hoge VARCHAR(32),foo VARCHAR(32)) ENGINE=INNODB;

-rw-rw---- 1 mysql mysql     8588 Jan  9 12:20 test.frm
-rw-rw---- 1 mysql mysql 50331648 Jan 16 15:35 test.ibd

TRUNCATE

TRUNCATE test;

-rw-rw---- 1 mysql mysql     8588 Jan  9 12:20 test.frm
-rw-rw---- 1 mysql mysql 50331648 Jan 16 15:36 test.ibd

ibdのサイズは変わらず

ドロップして再作成

DROP TABLE test;
CREATE TABLE test (hoge VARCHAR(32),foo VARCHAR(32)) ENGINE=INNODB;

-rw-rw---- 1 mysql mysql  8588 Jan 16 15:40 test.frm
-rw-rw---- 1 mysql mysql 98304 Jan 16 15:40 test.ibd

これで再作成されてる

故、ディスク容量を減らしたいのならTRUNCATEの代わりにDROP&CREATE

  • TRUNCATEの代用

InnoDBを新しくすればいんだけど
取り敢えずLIKEしてRENAMEで代用

CREATE TABLE test_tmp LIKE test;
DROP TABLE test;
RENAME test_tmp TO test;

漢(オトコ)のコンピュータ道: InnoDB Pluginことはじめ。快適ストレージエンジン生活はじまる!