테이블 PK 타입별 차이

이태형·2025년 7월 26일

Growth Log

목록 보기
17/18

int(AUTO_INCREMENT) 형을 쓰는 이유

저장 효율성

보통 페이지(4~16KB) 단위 (디스크 블록)로 저장
Int는 4Byte 고정으로 페이지에 더 많은 키를 저장할 수 있음
Char 타입과 비교할 경우, Int 와 같은 자리 수인 “123456”를 표현하는 경우, Char 는 6byte, Int는 4byte 로 노드에 더 많은 데이터를 저장할 수 있음
동일한 데이터 수를 가져올 때 Char형 보다 적은 페이지를 읽을 수 있음

검색 효율성

숫자 비교는 < , >, = 로 빠르게 비교가 가능
문자열은 “%aa”, “aa%” 같은 방법으로 비교
앞 글자부터 순회비교를 해서 성능이 떨어짐
문자열에 비해 검색속도가 빠름

삽입 효율성

대부분의 RDB는 B+Tree 인덱스 구조
B+Tree는 정렬된 상태를 유지
AUTO_INCREMENT로 PK 사용 시, 끝에 삽입되어 정렬된 상태를 유지하므로 재조정이 거의 없음
페이지 분할이 적게 발생
Char 형은 UUID나 랜덤 문자열 등으로 삽입 시, B+Tree 인덱스의 중간에 삽입되는 경우가 많아 페이지 분할이 빈번히 발생

char

고유성 중시

분산된 데이터베이스에서 Int 형은 각 서버에서 중복된 값이 생성될 위험이 있음
UUID 같은 랜덤 문자열 기반 PK는 충돌 가능성이 거의 없음
데이터 병합 시, UUID 같은 랜덤 문자열 기반은 충돌이 거의 발생하지 않아 병합이 용이
AUTO_INCREMENT같은 경우 충돌 발생 가능

대용량 배치 처리

AUTO_INCREMENT 같은 경우 PK 생성을 DB에 위임하므로 대용량 데이터 삽입 시, 병목 현상 발생 가능
UUID 같은 PK를 사용하는 경우, 대용량 배치 처리가 가능함
클라이언트 단에서 관리포인트는 늘어남

보안성 중시

PK 값을 예측하기 어렵게 함
Int형(AUTO_INCREMENT) 같은 경우, 순차적으로 증가하기 때문에 외부에서 URL이나 API 파라미터를 통해 값을 쉽게 유추할 수 있음
UUID 값을 사용하는 경우, 값 예측이 어려워 보안성이 높아짐

0개의 댓글