피드로 돌아가기
SQLite에서 UUID 기본 키의 위험성
GeekNewsGeekNews
Database

SQLite에서 UUID 기본 키의 위험성

SQLite UUID4 PK 도입 시 삽입 성능 최대 16배 저하 확인

neo2026년 6월 7일7intermediate

Context

SQLite의 B-tree 기반 저장 구조에서 기본 키(PK)의 정렬 특성은 물리적 저장 순서를 결정하는 핵심 요소임. 랜덤하게 생성되는 UUID4를 클러스터드 인덱스로 사용할 경우 B-tree의 잦은 재균형(Rebalancing)과 페이징 비용이 발생하여 쓰기 성능이 급격히 저하됨.

Technical Solution

  • WITHOUT ROWID 옵션을 통한 선언적 PK의 클러스터드 인덱스화로 데이터 물리 저장 구조 제어
  • UUID4의 무작위성을 제거한 시간 순서 기반의 UUID7 도입을 통해 B-tree 삽입 지점의 국소성 확보
  • rowid 기반 테이블의 순차적 정수 키를 통한 B*-Tree 리프 노드 최적 저장 방식 활용
  • UUID4 WITH ROWID 구성 시 발생하는 쓰기 증폭(Write Amplification) 및 랜덤 인덱스 삽입 비용 분석
  • 데이터 크기에 따른 B-Tree(WITHOUT ROWID)와 B*-Tree(rowid) 간의 저장 효율성 및 페이지 활용도 차이 검토

- SQLite에서 UUID PK 사용 시 반드시 UUID7과 같은 정렬 가능한 식별자 검토 - 대량의 쓰기 작업이 예상되는 테이블은 WITHOUT ROWID 사용 전 레코드 크기가 페이지 크기의 1/20 이하인지 확인 - 분산 ID 생성이 필요한 경우 단일 지점 잠금(Lock)을 피하기 위해 타임스탬프 기반 UUID 설계 적용

원문 읽기