인덱스란?
- 테이블에서 원하는 데이터를 빠르게 찾기 위해 사용되는 자료 구조
- 테이블의 특정 컬럼을 기반으로 정렬된 별도의 데이터 구조를 생성하여 검색 성능 최적화
- SELECT, WHERE, JOIN 등의 연산에서 검색 속도 향상
- 대신 쓰기 (INSERT, UPDATE, DELETE) 성능이 다소 저하됨
인덱스 주요 유형
- B-Tree 인덱스 : 가장 일반적인 인덱스, 균형 트리 구조를 유지하여 검색 최적화
- Hash 인덱스 : 정확한 값 비교에 적합하지만 범위 검색에는 부적합
- Full-Text 인덱스 : 긴 텍스트에서 문자열 검색 최적화
- Bitmap 인덱스 : 값의 종류가 적은 컬럼에 적합
- Clustered 인덱스 : 테이블의 데이터 자체가 인덱스로 정렬 되어 저장됨
- Non-Clustered 인덱스: 테이블 데이터와 별도로 인덱스가 관리됨
장점
- 검색 속도 향상
- WHERE 조건의 탐색 속도 증가
- ORDER BY, GROUP BY 최적화 가능
단점
- 인덱스를 함께 관리해야 하기 때문에 INSERT, UPDATE, DELETE 속도 저하
- 인덱스를 따로 저장해야 하므로 추가적인 저장 공간 필요
인덱스 사용을 고려해야 하는 경우
✅ 인덱스가 효과적인 경우
- WHERE 절에 자주 사용되는 컬럼 → 검색 조건으로 자주 사용
- JOIN에 자주 사용되는 컬럼 → 테이블 간 관계 최적화
- ORDER BY, GROUP BY에 자주 사용되는 컬럼 → 정렬 속도 개선
❌ 인덱스를 만들지 않는 것이 좋은 경우
- 자주 변경되는 컬럼 → 인덱스 재구성이 필요
- 데이터가 너무 작은 테이블 → 풀 스캔이 더 빠를수도 있음
- 중복된 값이 너무 많은 컬럼
인덱스를 사용하면 검색 속도가 향상됨, 그러나 쓰기 성능이 저하 됨
인덱스를 사용할 때는 검색 속도 향상과 쓰기 성능 저하의 트레이드 오프를 생각하며 사용하는것이 좋음