[게임 서버] 7.6 인덱스와 키

게시:     수정

카테고리:

태그:

이 글은 아래의 책을 자세히 정리한 후, 정리한 글을 GPT에게 요약을 요청하여 작성되었습니다.
게임 서버 프로그래밍 교과서, 배현직 저자

📦 7. 데이터베이스 기초

👉🏻 6. 인덱스와 키

🔍 인덱스 (Index)

정의:

  • 추가적인 쓰기 작업과 저장 공간을 활용하여 데이터베이스 테이블의 검색 속도를 향상시키기 위한 자료구조

📋 인덱스 특징

1. 필드 단위 설정:

  • 인덱스는 필드 단위로 설정할 수 있다

2. 검색 속도 향상:

  • 특정 조건에서 어마한 검색 속도 차이를 보여준다
  • 검색만이 아닌 수정/삭제에서도 큰 도움이 됨

3. 유니크 속성:

  • 유니크 속성을 추가로 지정할 수 있다
  • 인덱스에 해당하는 필드 값이 같은 레코드가 2개 이상 들어가지 못하게 막음
  • 예: 필드 a가 유니크 인덱스라면, (100, 200, 300)과 (100, 210, 310)을 동시에 넣지 못함

⚠️ 인덱스 단점

성능 비용:

  • 레코드가 변경되면 인덱스도 변경해야 한다
  • 쓰기 작업 시 추가적인 오버헤드 발생
  • 추가 저장 공간 필요

🔑 프라이머리 키 (Primary Key, 기본 키)

📋 특징

1. 개수 제한:

  • 한 테이블에 하나만 추가 가능
  • 필드 여러 개를 묶어서 기본 키로 설정 가능

2. 중복 불가:

  • 중복이 불가능하다
  • 즉, 기본 키 값이 동일한 레코드가 존재할 수 없다

3. NULL 불가:

  • 필드 값은 null이 될 수 없음

💡 기본 키 설정 예시

PK.png

설정 결과:

  • UserID와 Password를 묶어 기본 키로 설정하여 왼쪽에 열쇠 아이콘이 붙음
  • 기본 키에는 Null 허용 옵션을 설정할 수 없음

🧐 정리

인덱스 vs 프라이머리 키

구분 인덱스 프라이머리 키
개수 여러 개 가능 테이블당 1개만
NULL 허용 가능 (유니크 제외) 불가능
중복 허용 가능 (유니크 제외) 불가능
목적 검색 속도 향상 레코드 고유 식별
자동 인덱스 수동 생성 자동으로 인덱스 생성됨

사용 가이드

인덱스를 사용해야 하는 경우:

  • 자주 검색되는 필드
  • WHERE 절에 자주 사용되는 필드
  • JOIN에 사용되는 필드
  • ORDER BY에 사용되는 필드

프라이머리 키 선택 기준:

  • 레코드를 고유하게 식별할 수 있는 필드
  • 변경되지 않는 값
  • 예: 사용자 ID, 주문 번호, 고유 식별자

주의사항:

  • 인덱스가 많으면 INSERT/UPDATE/DELETE 속도 저하
  • 작은 테이블은 인덱스 효과 미미
  • 프라이머리 키는 신중하게 선택 (변경 어려움)

GameServer 카테고리 내 다른 글 보러가기

댓글남기기