Database/Mysql

[Real MySQL] 8-2. 인덱스

noahkim_ 2023. 11. 25. 02:59

백은빈, 이성욱 님의 "Real MySQL" 책을 정리한 포스팅 입니다.

 

1. 인덱스

  • 데이터를 빠르게 찾을 수 있도록 도와주는 자료구조
항목 설명
형식 key-value 형식
정렬 방식 특정 컬럼 값을 기준으로 정렬하여 저장 (항상 정렬 유지)

 

알고리즘

알고리즘 설명
B-Tree - 기본 인덱싱 방식
- 범위 검색 효율적
Hash Index - 컬럼 값을 해시 계산하여 인덱싱
- 매우 빠름 (주로 인메모리 기반의 데이터베이스에서 사용)
- 정확히 일치하는 검색만 가능 (범위/부분 검색 불가)

 

2. 구분

Key

종류 설명
Primary Key - 행을 대표하는 컬럼
- 유일성 보장
- Not Null
- "키 값 - 레코드 주소"로 구성
Secondary Key
- 보조 검색용 인덱스
- 유일성 보장 ❌
- Nullable
- "키 값 - PK 값"으로 구성

 

데이터 중복 여부

종류 설명
Unique Index - 중복 불가
- Nullable 허용
Non-Unique Index - 중복 허용
- Not Null 권장

 

3. 장단점

장점

항목 설명
검색 속도 향상
테이블 전체를 스캔하지 않고, 인덱스를 통해 빠르게 원하는 데이터를 조회할 수 있음
정렬된 접근 가능
B-Tree 인덱스는 데이터를 정렬된 순서로 저장해 범위 조회(range query)에 유리함
중복 제거 가능 Unique Index를 사용하면 컬럼의 값이 중복되지 않도록 강제할 수 있음
조인 성능 향상 조인 조건에 사용하는 컬럼에 인덱스를 생성하면 조인 성능이 크게 개선됨
조건 검색 최적화
조건절 사용 시 인덱스를 활용하여 효율적인 쿼리 수행 가능
카운트 연산 최적화
특정 조건의 개수를 셀 때 인덱스를 활용하면 성능이 좋아짐 (ex: SELECT COUNT(*) WHERE ...)
결합 인덱스로 다중 조건 처리 여러 컬럼을 결합한 인덱스를 만들면 복합 조건 검색에 유리함

 

단점

항목 설명
대용량 시 성능 저하 인덱스 크기 증가로 인해 검색 속도 느려짐
생성 시간 소모 전체 데이터 정렬 후 저장해야 하므로 CPU/디스크 부하 큼
수정 작업 시 성능 저하 데이터 변경 시 인덱스도 함께 업데이트 되어야 함