백은빈, 이성욱 님의 "Real MySQL" 책을 정리한 포스팅 입니다.
1. 인덱스
데이터를 빠르게 찾을 수 있도록 도와주는 자료구조
- key-value 형식
- 특정 컬럼값을 정렬하여 보관
- 저장될 때마다 값이 항상 정렬됨
Key
Primary Key
- 행을 대표하는 컬럼들로 이루어진 인덱스
- 유일성
- Not Null
- "키 값-레코드 주소 값"으로 구성됨
Secondary Key
- Primary Key와는 다른 컬럼 조합으로 생성된 인덱스
- 더 빠르게 검색하기 위한 기능 (보조적인 역할)
- 유일성 필수 X
- Nullable
- "키 값-PK값"으로 구성됨
알고리즘
B-Tree 알고리즘 (기본 알고리즘)
- 원래의 컬럼 값을 이용해 인덱싱하는 알고리즘 입니다.
- 균형 이진 트리 구조
- 범위 검색에 매우 효율적
Hash Index 알고리즘
- 컬럼 값을 해시 계산으로 가공해서 인덱싱하는 알고리즘 입니다.
- 매우 빠름
- 정확히 일치하는 검색만 가능 (부분 검색 or 범위 검색 X)
- 주로 인 메모리 기반의 데이터베이스에서 사용합니다.
데이터 중복 여부
Unique Index
- 중복된 값을 허용하지 않도록 강제하는 인덱스
- Nullable
Non-Unique Index
- 중복된 값을 허용
- Not Null
단점
대용량 데이터 시, 성능 느려짐
- 인덱스는 특정 컬럼의 모든 값을 저장
- 적재된 데이터가 많아질수록, 인덱스 크기도 커지므로 찾는 속도가 느려짐
생성 시, 많은 시간 소요
- 인덱스 생성 시, 모든 데이터를 읽고 정렬한 후 저장해야 하므로 많은 시간이 소요됨
- 이 과정에서 CPU & Disk I/O 리소스를 많이 사용함
데이터 수정 작업이 많으면 성능 저하 가능성 높음
- 데이터 수정 시, 인덱스도 함께 업데이트 되어야 함
- 인덱스 유지보수 비용이 증가하여, 데이터베이스 성능이 저하될 수 있음
'Database > Mysql' 카테고리의 다른 글
[Real MySQL] 15-1. 데이터 타입: 문자열 (0) | 2023.11.26 |
---|---|
[Real MySQL] 8-3. 인덱스: B-Tree (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 |