데이터베이스를 운영하다 보면 테이블에 대해 INSERT(삽입), UPDATE(수정), DELETE(삭제)와 같은 데이터 변경 작업을 수시로 수행하게 됩니다. 그런데 이러한 작업이 계속 반복되면 테이블의 물리적 저장 공간에 단편화(fragmentation)가 발생하고, 그 결과 데이터베이스 서버 전체의 성능이 점차 저하될 수 있습니다.
OPTIMIZE TABLE 문이란?
MySQL은 이러한 단편화 문제를 예방하고 해결하기 위해 OPTIMIZE TABLE 문을 제공합니다. 이 문을 실행하면 테이블의 데이터와 인덱스가 재구성되어 저장 공간이 정리되고, 디스크 I/O 효율이 개선되어 쿼리 성능을 되찾을 수 있습니다.
기본 문법
OPTIMIZE TABLE table_name
여기서 table_name은 최적화하려는 테이블의 이름입니다.
실행 예제
아래는 student_info 테이블에 대해 OPTIMIZE TABLE 문을 실행한 예입니다.
mysql> Optimize table student_info\G
*************************** 1. row ***************************
Table: query.student_info
Op: optimize
Msg_type: status
Msg_text: OK
1 row in set (1.34 sec)실행 결과의 Msg_type이 status이고 Msg_text가 OK라면 테이블이 정상적으로 최적화된 것입니다.
참고 사항
- InnoDB 테이블의 경우 OPTIMIZE TABLE은 내부적으로 테이블 재구성(ALTER TABLE ... FORCE)과 동일하게 동작하며, MyISAM 테이블에서는 데이터 파일의 단편화를 직접 제거합니다.
- 최적화가 진행되는 동안 해당 테이블에 잠금(lock)이 걸릴 수 있으므로, 트래픽이 적은 시간대에 실행하는 것이 좋습니다.
- 대량의 DELETE나 UPDATE 작업이 자주 발생하는 테이블이라면 주기적으로 OPTIMIZE TABLE을 실행해 성능 저하를 예방하는 것이 효과적입니다.