Database/Mysql

[Real MySQL] 8-6. 인덱스: 함수 기반 인덱스

noahkim_ 2024. 9. 7. 12:31

백은빈, 이성욱 님의 "Real MySQL" 책을 정리한 포스팅 입니다.

 

1. 함수 기반 인덱스

  • 칼럼의 값을 변형해서 만들어진 값에 대해 구축된 인덱스
  • 계산 과정의 차이만 있을 뿐 내부 구조 및 유지관리 방법은 B-Tree 인덱스와 동일

 

가상 칼럼을 이용한 구현

  • 현재 존재하는 컬럼을 사용하여 가상 컬럼 및 인덱스 생성 가능
  • 단, 테이블의 구조가 변경됨
ALTER TABLE user
  ADD full_name VARCHAR(30) AS (CONCAT(first_name, ' ', last_name)) VIRTUAL,
  ADD INDEX ix_fullname (full_name);

 

함수를 이용한 구현

  • 함수를 직접사용하는 인덱스
  • 테이블의 구조를 변경하지 않음
CREATE TABLE user (
    first_name VARCHAR(10),
    last_name VARCHAR(10),
    INDEX ix_fullname ((CONCAT(first_name, ' ', last_name)))
)

 

조회
SELECT * FROM user WHERE CONCAT(first_name, ' ', last_name) = 'Lee';
  • 반드시 조건절에 함수 기반 인덱스에 명시된 표현식이 그대로 사용되어야 함