Backend
[매일메일] 데이터베이스 인덱스에 대해서 설명해주세요.
· 7분 읽기
데이터베이스 인덱스에 대해서 설명해주세요.
1. 직접 조사(구글링, 공식문서, 기술 포스팅 등으로 학습)
인덱스(Index)란?
정의: 추가적인 쓰기 작업과 저장 공간을 사용하여 데이터베이스 테이블의 검색 속도를 향상시키는 자료구조
(책의 색인처럼 특정 데이터를 빠르게 찾을 수 있음)
장점
- SELECT 뿐만 아니라 UPDATE, DELETE도 먼저 대상을 빠르게 찾아야 하기 때문에 성능 향상에 도움.
- Full Scan(테이블 전체 탐색)을 줄여 효율적인 검색 가능.
-- 인덱스 생성 CREATE INDEX idx_users_name ON users(name); -- 인덱스 사용 조회 SELECT * FROM users WHERE name = 'Choi';단점
- INSERT, DELETE, UPDATE 시 인덱스도 갱신해야 하므로 오버헤드 발생.
- 인덱스 유지/관리에 추가 저장 공간(약 10% 이상) 필요.
- 불필요하게 많은 인덱스를 만들면 오히려 성능 저하.
적절한 사용 상황
- 데이터가 많은 테이블.
- INSERT/UPDATE/DELETE가 빈번하지 않은 컬럼.
- WHERE, JOIN, ORDER BY에서 자주 사용되는 컬럼.
- 중복도가 낮은 컬럼 (예: 주민번호, 이메일 등).
인덱스(Index)의 자료구조
1) 해시 테이블(Hash Table)
(Key, Value) 형태로 저장.
Key를 해싱 → 해시 버킷에서 Value를 바로 찾아감.
시간 복잡도: 평균 O(1)
장점
- 등호(=) 검색에 매우 빠름.
- SELECT * FROM users WHERE id = 100;
단점
- 범위 검색(>, <, BETWEEN, LIKE 'abc%') 불가능.
- 정렬(ORDER BY) 불가능.
활용
- 캐시(DB가 아닌 메모리 저장소, 예: Redis)
- 일부 DB 엔진에서 특별한 경우 사용.
2) B+Tree
- 대부분의 RDBMS(MySQL InnoDB, Oracle, PostgreSQL 등)에서 기본 인덱스 구조.구조
- 인덱스 노드(중간 노드): Key만 저장.
- 리프 노드: Key + 데이터 위치 저장.
- 리프 노드들은 Linked List로 연결되어 순차 탐색 가능.
- 시간 복잡도: O(log n)
- 장점
- =, <, >, BETWEEN, LIKE 'abc%' 등 다양한 검색 연산 지원.
- 정렬(ORDER BY) 최적화 가능.
- 대규모 데이터에서 효율적.
- 단점
- 해시 테이블보다 단건 조회 속도는 느림.
- 무조건 리프 노드까지 탐색해야 함.
- 활용
- MySQL(InnoDB) 기본 인덱스 구조.
- PK(기본키), 일반 인덱스(Index), 유니크 인덱스(Unique Index) 모두 B+Tree 기반
3) 차이점 비교
구분 Hash 인덱스 B-Tree 인덱스
<table style="border-collapse: collapse; width: 100%;" border="1" data-ke-align="alignLeft"><tbody><tr><td><b>검색 방법</b></td><td>키를 해싱하여 해시 테이블에서 O(1) 시간에 직접 접근</td><td>루트부터 리프까지 탐색 (O(log n))</td></tr><tr><td><b>범위 검색</b></td><td>❌ 불가능 (모든 해시값 탐색 필요)</td><td>✅ 가능 (리프 노드가 연결되어 있어 순차 탐색 용이)</td></tr><tr><td><b>데이터 정렬</b></td><td>무작위 배치 (정렬 불가)</td><td>키 값 기준으로 정렬된 상태 유지</td></tr><tr><td><b>인덱스 크기</b></td><td>상대적으로 작음, 하지만 해시 충돌 시 비효율적</td><td>크기가 클 수 있으나 안정적</td></tr><tr><td><b>적용 가능성</b></td><td>정확한 값 검색(=)에 최적, PK나 고유 키 탐색에 유용</td><td>범위 검색, 정렬, 대부분의 쿼리에 유리 (RDBMS 기본 인덱스 구조)</td></tr></tbody></table>
- Hash 인덱스는 "정확히 일치하는 검색"에 강하지만 범위/정렬 불가능.
- B-Tree 인덱스는 범용성이 높아 실제 DB에서 가장 널리 쓰임.
2. 정답 확인(매일메일 해설)
3. 최종 정리
데이터베이스 인덱스
- 정의: 책의 목차(색인)처럼, 추가 저장공간과 자료구조를 활용해 검색 속도를 빠르게 해주는 기능
- 장점
- SELECT, UPDATE, DELETE 속도 향상
- 시스템 부하 감소
- 단점
- 저장 공간 필요(약 10%)
- INSERT/UPDATE/DELETE 성능 저하 (인덱스 갱신 필요)
- 대표 자료구조
- B-Tree 인덱스: 범용, 정렬/범위 검색에 유리, O(log n)
- Hash 인덱스: 정확히 일치 검색에 유리, O(1), 범위 검색 불가
- 적용 시기
- 규모가 큰 테이블
- 검색·조인·정렬에 자주 쓰이는 컬럼
- 중복도가 낮은 컬럼
🔗 참고 URL
- 공식 문서:
- 포스팅/영상:
댓글
GitHub 계정으로 댓글을 남길 수 있어요.