본문으로 바로가기

[Database][MySQL] 테이블 최적화

category Back-end 2019.03.22 11:51
4.2.1 엔진 변경
* 테이블의 스토리지 엔진을 변경하는 명령으로 쓰이지만, 이 명령을 실행하면 내부적인 테이블의 저장소를 변경하는 작업이 필요하기 때문에 항상 테이블의 모든 레코드를 복사하는 작업이 수행된다.
* 즉, 기존과 같은 엔진명을 명시 하더라도 테이블의 데이터를 복사하는 작업이 실행된다.
alter table [테이블명] engine=엔진명;


4.2.2 테이블 손상 확인
* 테이블 에러를 체크한다.
check table [테이블명];


4.2.3 테이블 복구
* 손상된 테이블을 복구한다.
repair table [테이블명];


4.2.4 테이블 최적화
* InnoDB 스토리지 엔진을 사용하는 테이블에 대해 OPTIMIZE TABLE 명령을 사용하면 엔진변경과 동일한 작업을 수행한다.
* 즉, 테이블 최적화란 테이블의 레코드를 한건씩 새로운 테이블에 복사 함으로써 테이블의 레코드를 컴팩트하게 만들어 주는 것이다.
* 기본기 순서로 데이타를 재배치하고, 이로 인해 인덱스로 함께 정리가 된다.
optimize table [테이블명];


* 내부 수행 순서
임시 테이블 생성 > 임시 테이블로 복제 > 기존 테이블 DROP > 임시 테이블의 이름을 기존 테이블의 이름으로 변환 
이때, 인덱스가 추가, 갱신 등으로 많은 시간을 허비하므로 인덱스 삭제/alter table/인덱스 재생성 순으로 하는 것이 좋다.


* 주의사항
MySQL에서는 컬럼을 추가하거나 삭제하는 작업은 모두 리빌드 작업이 필요하므로 작업시 주의가 필요하며, 추가적인 최적화 작업을 수행할 필요가 없다. 
테이블을 리빌드하는 상태에서는 내부적으로 임시 테이블을 만들어서 수정하게 되므로, 다른 사용자가 원본 테이블의 데이터를 조회할 수는 있으나 UPDATE, DELETE 작업은 대기 상태가 된다. 
( 이 경우, Online DDL 참고하면 대기하지 않고 수행할 수 있다. )


4.2.5 테이블 분석
* optimizer가 사용하는 통계 정보를 갱신한다.

analyze table [테이블명];

 



댓글을 달아 주세요

대마도사 블로그
블로그 이미지 대마도사 님의 블로그
MENU
VISITOR 오늘0 / 전체11,179