Function Trap

컬럼 원형을 바꾸면 기존 B-Tree 정렬을 그대로 쓰기 어렵다

UPPER(name), YEAR(created_at)처럼 컬럼을 함수로 감싸면 저장된 인덱스 키와 비교식이 달라진다.

문제 조건
WHERE UPPER(name) = 'KIM'

name 인덱스는 원래 값 기준으로 정렬되어 있어 함수 결과와 바로 맞지 않는다.

대응
표현식 인덱스
INDEX ON UPPER(name)

DBMS가 지원하면 표현식 결과를 별도 인덱스 키로 저장한다.

저장값 정규화
lower_name 컬럼 유지

검색 기준을 저장 시점에 맞춰두면 일반 인덱스로도 탐색 가능하다.

범위 조건 변환
DATE(created_at) 대신 created_at >= ...

날짜 함수 대신 시작/끝 범위로 바꾸면 컬럼 원형을 유지한다.