나는 MySQL 내부 작동 원리는 잘 모르겠다. 어떤 식으로 되는지 정확히는 모르겠지만 대량의 row를 삭제 (이동...) 후에는 index나, 디스크 사용량이 여전히 미반영임. lazy-deletion에 가깝게 구현된 듯 하다. 이럴 때 compaction을 하려면
OPTIMIZE TABLE your_table_name;
명령어를 쓰면 된다.
1. 디스크 공간 회수
2. index 재구성
3. Data file defragment
mysql 버전마다 다른데 이 작업은 MySQL 5.6.17 이후부터는 online 작업이라서 다른 클라이언트들이 테이블에 읽고 쓰는 작업을 optimize작업이 진행중인 도중에 수행할 수 있다.