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

MySQL 생성 컬럼(Generated Column)의 두 가지 유형: VIRTUAL vs STORED

MySQL의 생성 컬럼(Generated Column)은 같은 테이블 내 다른 컬럼들의 값을 기반으로 자동으로 계산되는 특수한 컬럼입니다. MySQL에서는 이러한 생성 컬럼을 VIRTUAL(가상)STORED(저장), 두 가지 유형으로 제공합니다.

1. VIRTUAL 생성 컬럼

이름에서 알 수 있듯이, VIRTUAL 생성 컬럼은 디스크 공간을 전혀 차지하지 않습니다. 대신 쿼리가 실행될 때마다 값이 실시간으로 계산됩니다. 컬럼을 정의할 때 'virtual' 키워드를 명시해도 되고 생략해도 되며, 키워드를 생략하면 기본적으로 VIRTUAL 유형으로 생성됩니다.

예제

mysql> CREATE TABLE triangle (
    SideA DOUBLE,
    SideB DOUBLE,
    SideC DOUBLE AS (SQRT(SideA * SideA + SideB * SideB))
);
Query OK, 0 rows affected (0.44 sec)

mysql> DESCRIBE Triangle;
+-------+--------+------+-----+---------+-------------------+
| Field | Type   | Null | Key | Default | Extra             |
+-------+--------+------+-----+---------+-------------------+
| SideA | double | YES  |     | NULL    |                   |
| SideB | double | YES  |     | NULL    |                   |
| SideC | double | YES  |     | NULL    | VIRTUAL GENERATED |
+-------+--------+------+-----+---------+-------------------+
3 rows in set (0.00 sec)

위 DESCRIBE 결과에서 SideC 컬럼의 Extra 항목이 'VIRTUAL GENERATED'로 표시되어 있는 것을 확인할 수 있습니다. 이는 SideC가 가상(VIRTUAL) 생성 컬럼임을 의미합니다.

2. STORED 생성 컬럼

반면, STORED 생성 컬럼은 실제로 디스크 공간을 차지합니다. 행이 삽입되거나 수정될 때 값이 한 번 계산되어 물리적으로 저장되므로, 반복적인 조회 성능이 중요한 경우에 유리합니다. 이 유형의 컬럼을 만들려면 반드시 'stored' 키워드를 명시해야 합니다.

예제

mysql> CREATE TABLE triangle_stored (
    SideA DOUBLE,
    SideB DOUBLE,
    SideC DOUBLE AS (SQRT(SideA * SideA + SideB * SideB)) STORED
);
Query OK, 0 rows affected (0.47 sec)

mysql> DESCRIBE triangle_stored;
+-------+--------+------+-----+---------+------------------+
| Field | Type   | Null | Key | Default | Extra            |
+-------+--------+------+-----+---------+------------------+
| SideA | double | YES  |     | NULL    |                  |
| SideB | double | YES  |     | NULL    |                  |
| SideC | double | YES  |     | NULL    | STORED GENERATED |
+-------+--------+------+-----+---------+------------------+
3 rows in set (0.00 sec)

위 결과에서 SideC 컬럼의 Extra 항목이 'STORED GENERATED'로 표시되어, 해당 컬럼이 저장(STORED) 생성 컬럼임을 보여줍니다.

두 유형의 비교 요약

구분VIRTUAL 생성 컬럼STORED 생성 컬럼
디스크 공간사용하지 않음사용함
계산 시점읽을 때마다 계산쓰기(INSERT/UPDATE) 시 계산 후 저장
키워드'virtual' (생략 가능, 기본값)'stored' (필수)
적합한 경우저장 공간 절약이 필요할 때읽기 성능이 중요할 때

정리하면, MySQL 생성 컬럼은 키워드 하나의 차이로 저장 방식이 달라집니다. 'virtual' 키워드를 사용하거나 아무 키워드 없이 생성하면 디스크를 절약하는 VIRTUAL 컬럼이 되고, 'stored' 키워드를 사용하면 계산된 값이 디스크에 저장되는 STORED 컬럼이 됩니다.