경험 중심 1인칭 답변
DB 인덱스는 특정 컬럼의 값을 B-Tree(또는 해시) 구조로 별도 저장해서 풀 테이블 스캔 없이 빠르게 위치를 찾는 방식으로 동작합니다. 조회 성능을 높이는 대신 INSERT·UPDATE·DELETE 시마다 인덱스도 함께 갱신해야 해서 쓰기 비용이 증가합니다. 인덱스가 오히려 성능을 떨어뜨리는 경우는 크게 세 가지입니다. 첫째, 선택도(cardinality)가 낮은 컬럼(예: 성별, 상태 코드)은 인덱스를 써도 풀 스캔보다 빠르지 않습니다. 둘째, 테이블 크기가 작으면 인덱스 조회 비용이 풀 스캔보다 커질 수 있습니다. 셋째, 복합 인덱스에서 선두 컬럼이 조건에 없으면 인덱스가 사용되지 않습니다. 인덱스는 읽기 속도와 쓰기 비용 사이의 트레이드오프를 의식하고 설계해야 합니다. 앞으로도 인덱스 설계 시 선택도와 쓰기 비용의 트레이드오프를 의식하고 사용 패턴에 맞게 인덱스를 설계하는 방식을 유지하겠습니다.
선택도가 낮은 컬럼의 인덱스는 오히려 성능을 떨어뜨리는 함정입니다. 복합 인덱스 선두 컬럼 조건 유무가 인덱스 사용 여부를 결정하는 핵심 설계 포인트입니다.