백은빈, 이성욱 님의 "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/디스크 부하 큼 |
수정 작업 시 성능 저하 | 데이터 변경 시 인덱스도 함께 업데이트 되어야 함 |
'Database > Mysql' 카테고리의 다른 글
[Real MySQL] 15-1. 데이터 타입: 문자열 (0) | 2023.11.26 |
---|---|
[Real MySQL] 8-3. 인덱스: 알고리즘 - B-Tree Index (0) | 2023.11.25 |
[Real MySQL] 5-1. 트랜잭션과 잠금: 트랜잭션 (1) | 2023.11.24 |
[Real MySQL] 4-4. 아키텍쳐: MySQL 로그 파일 (1) | 2023.11.24 |
[Real MySQL] 4-2. 아키텍쳐: InnoDB 스토리지 엔진 아키텍쳐 (0) | 2023.11.24 |