테이블 구조 변경 작업은 대부분 컬럼을 추가하거나 타입을 변경하는 작업이다.
컬럼 추가
MySQL 8.0 버전으로 업그레이드되면서 테이블 컬럼 추가 작업은 대부분 INPLACE
알고리즘을 사용하는 온라인 DDL로 처리가 가능하다.
또한 컬럼을 테이블의 제일 마지막 컬럼으로 추가하는 작업은 INSTANT
알고리즘으로 즉시 추가된다.
|
|
사용하여 기존 컬럼 중간에 새로 추가하는 경우 테이블의 리빌드가 필요하여 INPLACE
알고리즘을 사용해야 한다.
따라서 테이블이 큰 경우라면 테이블의 마지막 컬럼으로 추가하는 것이 좋다.
컬럼 삭제
컬럼을 삭제하는 작업은 항상 테이블 리빌드를 필요로 하기 때문에 INPLACE
알고리즘만 사용 가능하다.
|
|
이름 및 타입 변경
컬럼의 타입 변경은 현재 컬럼의 타입과 변경하고자 하는 데이터 타입에 따라 매우 다양한 형태가 될 수 있다.
|
|
- 이름 변경:
- 컬럼의 이름만 변경하는 작업은
INPLACE
알고리즘을 사용하지만 실제 데이터 리빌드 작업은 필요치 않으므로 빠르게 완료된다.
- 컬럼의 이름만 변경하는 작업은
- 데이터 타입 변경:
- 데이터 타입이 변경되는 경우
COPY
알고리즘이 필요하며 온라인 DDL로 실행되어도 스키마 변경중에는 테이블 쓰기 작업은 불가능하다.
- 데이터 타입이 변경되는 경우
- 크기 확장:
- 확장하는 경우는 현재 길이와 확장하는 길이의 관계에 따라 리빌드가 필요할 수 있다.
- 크기 축소:
- 길이를 축소하는 경우 완전히 다른 타입으로 변경되는 경우과 같이
COPY
알고리즘을 사용해야한다. - 스키마를 변경하는 중 테이블의 데이터 변경은 허용되지 않으므로
SHERED
로 사용돼야한다.
- 길이를 축소하는 경우 완전히 다른 타입으로 변경되는 경우과 같이
컬럼 타입을 변경 중 가장 빈번한 것은 VARCHAR
, VARBINARY
타입의 길이를 확장하는 것이다.
- 해당 타입은 컬럼의 쵀대 허용 사이자가 메타데이터에 저장되지만, 실제 컬럼이 가지는 값의 길이는 데이터 레코드의 컬럼 헤더에 저장되는데, 동일한 값이더라도 다른 용량이 필요할 수 있다.
- 값의 길이를 위해서 사용하는 공간의 크기는 최대 가질 수 있는 바이트 수 만큼 필요하기 때문에 컬럼값의 길이 저장용 공간은 컬럼의 값이 최대 가질수 있는 바이트 수가 255 이하인 경우 1 바이트만 사용하며, 256 바이트 이상인 경우 2바이트를 사용한다.
INPLACE
알고리즘으로 필요로 하는 같은 용량으로 변경하는 경우 리빌드가 필요 없지만, 문자 셋이나 크기 변경으로 인해 필요로 하는 용량이 변경된다면 리빌딩이 필요하다.