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 >= ...
날짜 함수 대신 시작/끝 범위로 바꾸면 컬럼 원형을 유지한다.