1. Index 개념
Index.
데이터베이스에서 검색 성능을 향상시키기 위한 자료구조.
테이블의 특정 컬럼 값을 기준으로 데이터의 위치 정보를 빠르게 찾을 수 있도록 정렬된 구조를 유지하는 방식.
일반적인 RDBMS(MySQL, PostgreSQL, Oracle 등)에서는 B+Tree 구조의 인덱스를 사용하여 검색 성능을 향상.
2. Index 동작 원리
Index는 책의 색인(index)과 유사한 구조.
책에서 특정 단어를 찾을 때 처음 페이지부터 끝까지 읽지 않고
색인을 통해 해당 단어가 있는 페이지를 바로 찾는 방식과 동일한 개념.
데이터베이스에서도 특정 조건으로 데이터를 검색할 때 다음 두 가지 방식 존재.
| 방식 | 설명 |
|---|---|
| Full Table Scan | 테이블 전체 데이터를 처음부터 끝까지 탐색 |
| Index Scan | 인덱스를 이용하여 필요한 데이터 위치만 빠르게 탐색 |
Index가 존재하면 SELECT ... WHERE 조건 검색 시
Full Table Scan 대신 Index Scan을 사용하여 검색 속도 향상.
3. Index 구조
Index는 특정 컬럼을 기준으로 다음 정보를 저장.
- Search Key : 인덱스로 사용하는 컬럼 값
- Pointer (Row Pointer) : 실제 데이터 위치 정보
즉 인덱스는 Search Key, Row Pointer 형태의 구조를 가지며 테이블 데이터보다 훨씬 작은 크기의 정렬된 구조로 관리.
대표적인 인덱스 자료구조
- B-Tree
- B+Tree
- Hash
- Bitmap
대부분의 RDBMS에서는 B+Tree 기반 인덱스 사용.
4. Index 유형
클러스터형 인덱스 (Clustered Index)
테이블 자체가 인덱스 순서로 정렬되는 구조.
특징
- 테이블 데이터가 인덱스 순서로 저장
- 보통 Primary Key 생성 시 자동 생성
예시
- 사전처럼 데이터 자체가 정렬된 구조
보조 인덱스 (Secondary Index)
테이블 데이터와 별도로 추가적인 인덱스 구조 생성.
특징
- 테이블과 별도 구조
CREATE INDEX또는UNIQUE KEY생성 시 생성
예시
- 책의 찾아보기(Index 페이지)와 유사한 구조
5. Index 장단점
| 구분 | 내용 |
|---|---|
| 장점 | 검색 속도 향상 (특히 SELECT WHERE 조건 검색) |
| 단점 | 추가 저장 공간 필요 |
| 단점 | INSERT / UPDATE / DELETE 시 인덱스 갱신 비용 발생 |
데이터 변경 작업이 많을 경우 인덱스 구조(B+Tree)가 재구성되면서 성능 저하 가능성.
6. Index 사용 상황
Index는 다음과 같은 경우에 효과적.
- WHERE 조건 검색이 자주 발생하는 컬럼
- JOIN에 자주 사용되는 컬럼
- 정렬(Order By)이나 그룹(Group By)에 사용되는 컬럼
반대로 다음 경우에는 효과가 적음.
- 데이터 변경이 매우 잦은 컬럼
- 선택도가 낮은 컬럼 (예: 성별)
핵심 정리
Index
- 데이터 검색 성능을 향상시키기 위한 자료구조
- 대부분의 RDBMS에서 B+Tree 구조 사용
장점
- SELECT WHERE 조건 검색 속도 향상
단점
- 추가 저장 공간 필요
- INSERT / UPDATE / DELETE 시 성능 비용 발생