Generated 컬럼
정의된 표현식에 따라 컬럼의 값이 자동으로 생성
- 표현식: 고정된 값, 함수 또는 다른 컬럼들에 대한 연산 조합 등이 해당

사용자가 직접 값을 입력하거나 변경할 수 없음
두 가지 종류가 존재
Virtual Column
컬럼의 값을 디스크에 저장하지 않음
컬럼의 값은 레코드가 읽히기 전 또는 BEFORE 트리거 실행 직후에 계산됨
인덱스 생성 가능(인덱스는 디스크에 저장)
Stored Column
컬럼의 값을 디스크에 저장
컬럼의 값은 레코드가 INSERT 되거나 UPDATE 될 때 계산되어 저장
인덱스 생성 가능
일반컬럼 <-> Stored Column 변경 가능
가상컬럼으로는 변경 불가능 (추가 삭제 방식으로만 전환 가능하다)
Function Basec Index
일반 인덱스는 컬럼 또는 컬럼의 Prefix만 인덱싱 가능
- CREATE INDEX ix_col ON tab (col);
함수 기반 인덱스는 표현식을 인덱싱 값으로 사용 가능
- CREATE INDEX f_index ON tab (col1+col2);
쿼리의 조건절에서 컬럼을 가공하는 경우에 유용하게 사용 가능
- SELECT * FROM tab WHERE (col1 + col2) > 10;
동작방식
Virtual Column을 자동 생성 후 인덱싱
생성된 컬럼은 일반적인 환경에서 확인 불가
생성된 컬럼은 !hidden!index_name!key_part!counter 형태로 지정되며 타입도 자동 지정됨
주의사항
인덱스 생성 후 실행 계획을 반드시 확인 (표현식을 정확하게 명시해야 인덱스 사용 가능)
표현식 결과의 데이터 타입을 명확하게 확인해서 조건값 지정 ( --column-type-info 사용해서 확인하기)
정확하게 명시하더라도 사용하지 않는 경우도 있음