1. Index를 사용하기 좋은 Column
Index는 조건 검색이 자주 발생하는 컬럼에 사용하는 것이 효과적.
특히 다음과 같은 특징을 가진 컬럼이 Index에 적합.
| 기준 | 적합성 |
|---|---|
| 카디널리티 (Cardinality) | 높을수록 적합 (데이터 중복이 적을수록 좋음) |
| 선택도 (Selectivity) | 높을수록 적합 (검색 범위가 좁을수록 좋음) |
| 조회 활용도 | WHERE 조건에서 자주 사용될수록 적합 |
| 수정 빈도 | 낮을수록 적합 |
2. Index 효과적으로 사용하는 방법
WHERE 절에 자주 사용되는 Column
SELECT WHERE 조건에서 자주 검색되는 컬럼에 Index 적용 시
검색 성능 향상 효과.
예
- 사용자 ID
- 주문 번호
- 이메일
데이터 수정 빈도가 낮은 Column
Index가 존재하면 다음 작업 수행 시 인덱스도 함께 갱신 필요.
- INSERT
- UPDATE
- DELETE
이 과정에서 B+Tree 구조 갱신 비용 발생.
따라서 데이터 변경이 잦은 컬럼에는 Index 비효율 발생 가능.
카디널리티가 높은 Column
카디널리티란 컬럼 값의 중복 정도를 의미.
| 예시 컬럼 | 카디널리티 |
|---|---|
| 사용자 ID | 높음 |
| 이메일 | 높음 |
| 성별 | 낮음 |
카디널리티가 높은 컬럼일수록 검색 범위 축소 효과 발생.
데이터 양이 많은 Table
데이터 양이 많을수록
- Full Table Scan 비용 증가
- Index 검색 효과 증가
따라서 대용량 테이블에서 Index 효과 극대화.
JOIN에 자주 사용되는 Column
JOIN 조건으로 자주 사용되는 컬럼에 Index 생성 시
- JOIN 성능 향상
- 검색 속도 개선
과도한 Index 생성 주의
Index는 많을수록 좋은 구조가 아님.
Index 증가 시
- 저장 공간 증가
- 데이터 변경 비용 증가
따라서 필요한 컬럼에만 Index 생성 필요.
3. 카디널리티 vs 선택도
| 개념 | 설명 |
|---|---|
| Cardinality | 컬럼 값의 고유 개수 |
| Selectivity | 특정 값을 선택했을 때 반환되는 데이터 비율 |
예시
| 컬럼 | 특징 |
|---|---|
| 사용자 ID | 카디널리티 높음 / 선택도 높음 |
| 성별 | 카디널리티 낮음 / 선택도 낮음 |
Index는 일반적으로 카디널리티가 높고 선택도가 높은 컬럼에서 효과적.
핵심 정리
Index 적용이 좋은 Column
- WHERE 조건에서 자주 사용되는 컬럼
- 카디널리티가 높은 컬럼
- 데이터 변경이 적은 컬럼
- JOIN에 자주 사용되는 컬럼
Index 적용이 좋지 않은 Column
- 데이터 중복이 많은 컬럼 (예: 성별)
- 데이터 변경이 매우 잦은 컬럼