[게임 서버] 7.6 인덱스와 키
카테고리: GameServer
태그: GameServer
이 글은 아래의 책을 자세히 정리한 후, 정리한 글을 GPT에게 요약을 요청하여 작성되었습니다.
게임 서버 프로그래밍 교과서, 배현직 저자
📦 7. 데이터베이스 기초
👉🏻 6. 인덱스와 키
🔍 인덱스 (Index)
정의:
- 추가적인 쓰기 작업과 저장 공간을 활용하여 데이터베이스 테이블의 검색 속도를 향상시키기 위한 자료구조
📋 인덱스 특징
1. 필드 단위 설정:
- 인덱스는 필드 단위로 설정할 수 있다
2. 검색 속도 향상:
- 특정 조건에서 어마한 검색 속도 차이를 보여준다
- 검색만이 아닌 수정/삭제에서도 큰 도움이 됨
3. 유니크 속성:
- 유니크 속성을 추가로 지정할 수 있다
- 인덱스에 해당하는 필드 값이 같은 레코드가 2개 이상 들어가지 못하게 막음
- 예: 필드 a가 유니크 인덱스라면, (100, 200, 300)과 (100, 210, 310)을 동시에 넣지 못함
⚠️ 인덱스 단점
성능 비용:
- 레코드가 변경되면 인덱스도 변경해야 한다
- 쓰기 작업 시 추가적인 오버헤드 발생
- 추가 저장 공간 필요
🔑 프라이머리 키 (Primary Key, 기본 키)
📋 특징
1. 개수 제한:
- 한 테이블에 하나만 추가 가능
- 필드 여러 개를 묶어서 기본 키로 설정 가능
2. 중복 불가:
- 중복이 불가능하다
- 즉, 기본 키 값이 동일한 레코드가 존재할 수 없다
3. NULL 불가:
- 필드 값은 null이 될 수 없음
💡 기본 키 설정 예시
설정 결과:
- UserID와 Password를 묶어 기본 키로 설정하여 왼쪽에 열쇠 아이콘이 붙음
- 기본 키에는 Null 허용 옵션을 설정할 수 없음
🧐 정리
인덱스 vs 프라이머리 키
| 구분 | 인덱스 | 프라이머리 키 |
|---|---|---|
| 개수 | 여러 개 가능 | 테이블당 1개만 |
| NULL | 허용 가능 (유니크 제외) | 불가능 |
| 중복 | 허용 가능 (유니크 제외) | 불가능 |
| 목적 | 검색 속도 향상 | 레코드 고유 식별 |
| 자동 인덱스 | 수동 생성 | 자동으로 인덱스 생성됨 |
사용 가이드
인덱스를 사용해야 하는 경우:
- 자주 검색되는 필드
- WHERE 절에 자주 사용되는 필드
- JOIN에 사용되는 필드
- ORDER BY에 사용되는 필드
프라이머리 키 선택 기준:
- 레코드를 고유하게 식별할 수 있는 필드
- 변경되지 않는 값
- 예: 사용자 ID, 주문 번호, 고유 식별자
주의사항:
- 인덱스가 많으면 INSERT/UPDATE/DELETE 속도 저하
- 작은 테이블은 인덱스 효과 미미
- 프라이머리 키는 신중하게 선택 (변경 어려움)
댓글남기기