[MySQL] Generated 컬럼 & 함수 기반 인덱스

기훈·2024년 7월 14일

MySQL

목록 보기
13/23

Generated 컬럼

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

  • 사용자가 직접 값을 입력하거나 변경할 수 없음

  • 두 가지 종류가 존재

    • Virtual Generated Column(가상컬럼)
    • Stored Generated Column (스토어드 컬럼)

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 사용해서 확인하기)

  • 정확하게 명시하더라도 사용하지 않는 경우도 있음

  • SELECT * FROM tab WHERE LOWER(col) LIKE 'abc%' (Bug #104713)
  • PK에 표현식은 포함 불가

0개의 댓글