데이터베이스 인덱스란 무엇이고, 왜 사용하나요?
한 줄 답변
인덱스는 데이터베이스 테이블의 검색 속도를 향상시키는 자료구조입니다. 책의 목차처럼 특정 컬럼의 값과 해당 레코드의 위치를 매핑하여, 전체 테이블을 스캔하지 않고도 원하는 데이터를 빠르게 찾을 수 있게 합니다.
핵심 개념 정리
인덱스(Index)는 데이터베이스에서 테이블의 검색 성능을 높이기 위한 별도의 자료구조입니다.
가장 일반적인 구현은 B-Tree(Balanced Tree) 인덱스입니다. B-Tree는 정렬된 상태를 유지하면서 삽입, 삭제, 검색 모두 O(log N) 시간 복잡도를 보장합니다.
인덱스가 없으면 WHERE 절의 조건을 만족하는 레코드를 찾기 위해 테이블 전체를 스캔(Full Table Scan)해야 합니다. 100만 건의 테이블에서 1건을 찾으려면 최악의 경우 100만 번 비교가 필요하지만, B-Tree 인덱스가 있으면 약 20번의 비교로 찾을 수 있습니다.
비교 정리
| 항목 | 인덱스 있음 | 인덱스 없음 |
|---|---|---|
| 검색 속도 | O(log N) — 빠름 | O(N) — Full Scan |
| INSERT 성능 | 인덱스 업데이트 오버헤드 | 인덱스 없으면 빠름 |
| 저장 공간 | 추가 공간 필요 | 추가 공간 없음 |
| 정렬 | ORDER BY 최적화 | 별도 정렬 필요 |
면접에서 이렇게 답하세요
인덱스를 설명할 때 '책의 목차' 비유를 사용하면 효과적입니다. 추가로 '인덱스를 무조건 많이 만들면 안 되는 이유'도 함께 설명하세요: INSERT/UPDATE/DELETE 시 인덱스도 함께 갱신해야 하므로 쓰기 성능이 저하됩니다. Cardinality가 높은(고유값이 많은) 컬럼에 인덱스를 걸어야 효과적입니다.
자주 묻는 추가 질문
Q. Clustered Index와 Non-Clustered Index의 차이는?
Clustered Index는 테이블 데이터 자체가 인덱스 순서로 물리적으로 정렬됩니다. 테이블당 1개만 가능하며, 보통 Primary Key에 자동 생성됩니다. Non-Clustered Index는 별도의 인덱스 구조에 데이터 위치 포인터를 저장하며, 여러 개 생성 가능합니다.
Q. 복합 인덱스에서 컬럼 순서가 왜 중요한가요?
복합 인덱스는 왼쪽 컬럼부터 순서대로 정렬됩니다. (A, B, C) 인덱스는 A 단독 검색, A+B 검색, A+B+C 검색에는 사용되지만, B 단독이나 C 단독 검색에는 사용할 수 없습니다.
Q. 인덱스가 오히려 성능을 저하시키는 경우는?
테이블 크기가 작을 때, Cardinality가 낮을 때(예: 성별 컬럼), 쓰기 작업이 매우 빈번할 때 인덱스가 오히려 오버헤드가 됩니다.
커뮤니티 하이라이트
“실무에서 EXPLAIN ANALYZE 돌려보면 인덱스 효과가 바로 보여요. 면접에서 '실제로 실행계획을 확인해본 경험이 있다'고 하면 점수 높습니다.”
38명의 개발자가 이 질문에 참여했습니다
관련 면접 질문
앱에서 직접 답변해보세요
매일 3개의 면접 질문에 답변하고,
다른 개발자들의 답변을 비교해보세요.