Computer >> 컴퓨터 >  >> 프로그래밍 >> MySQL

MySQL 저장형 GENERATED COLUMNS와 가상(Virtual) GENERATED COLUMNS의 차이점 완벽 정리

MySQL에서 저장형(Stored) GENERATED COLUMNS가상(Virtual) GENERATED COLUMNS는 모두 표현식 기반으로 자동 계산되는 컬럼이지만, 내부 동작 방식과 사용 시나리오가 크게 다릅니다. 아래에서 디스크 공간, 연산 방식, 값 계산 시점, 활용 사례 네 가지 관점에서 핵심 차이를 살펴보겠습니다.

1. 디스크 공간 측면

가상 생성 컬럼(Virtual Generated Column)은 물리적인 값을 저장하지 않기 때문에 디스크 공간을 전혀 차지하지 않습니다. 반면, 저장형 생성 컬럼(Stored Generated Column)은 계산된 값을 실제로 테이블에 저장하므로 추가적인 디스크 공간을 소비합니다.

2. 연산(Operation) 방식 측면

가상 생성 컬럼은 INPLACE 방식으로 처리됩니다. 즉, 테이블 정의만 변경될 뿐 기존 데이터를 다시 복사할 필요가 없어 작업 부담이 적습니다. 반면, 저장형 생성 컬럼은 COPY 방식으로 동작하며, 새로운 일반 컬럼을 추가하는 것과 비슷한 비용이 발생합니다.

3. 값 계산 시점 측면

가상 생성 컬럼은 읽기(SELECT) 작업과 BEFORE 트리거가 실행되는 시점에 실시간으로(on the fly) 값을 계산합니다. 반면, 저장형 생성 컬럼은 모든 INSERT 및 UPDATE 문이 실행될 때마다 값을 미리 계산하여 저장합니다.

4. 어떤 경우에 사용해야 할까?

가상 컬럼은 데이터 변경이 매우 잦은 경우에 적합합니다. 단, 가상 컬럼의 비용은 테이블을 지속적으로 읽을 때 발생하며, 서버는 읽기 요청이 있을 때마다 해당 컬럼의 값을 매번 다시 계산해야 한다는 점을 고려해야 합니다.

반면, 저장형 컬럼은 데이터가 생성된 이후 거의 변하지 않거나 전혀 변하지 않는 경우에 사용하는 것이 좋습니다. 값을 미리 저장해 두므로 읽기 성능이 중요한 워크로드에서 유리합니다.

요약 비교표

구분가상(Virtual) 생성 컬럼저장형(Stored) 생성 컬럼
디스크 공간사용하지 않음사용함
추가 연산 방식INPLACE (데이터 복사 없음)COPY (새 컬럼 추가와 유사한 비용)
값 계산 시점읽기 시 실시간 계산, BEFORE 트리거INSERT/UPDATE 시마다 갱신
권장 사용 사례데이터 변경이 잦은 경우데이터가 거의 변하지 않는 경우