테이블의 기본키로 DATETIME은 어떨까?

Posted by HULIA(휴리아)
2025. 9. 23. 23:16 카테고리 없음

 

 

 

정리하자면, 테이블의 기본키(Primary Key)로 DATETIME을 쓰는 건 권장되지 않습니다

 


문제점
1.유일성 보장 어려움
같은 시각(밀리초 단위)으로 여러 건이 동시에 들어올 경우 PK 충돌 가능성이 높습니다.
특히 다중 서버 환경, 트랜잭션 동시처리 시 더 취약합니다.

2.인덱스 효율성 저하
PK는 클러스터형 인덱스(Clustered Index)가 되는 경우가 많은데, DATETIME은 단순히 시간순 정렬은 가능하지만 랜덤 삽입 시 성능 저하가 있을 수 있습니다.

3.가독성/관리성 문제
시간이 곧 식별자 역할을 하면, 사람이 식별하기도 불편하고 조인 시에도 직관성이 떨어집니다.


언제 가능할까?
로그성 데이터(이벤트 로그, 센서 측정값 등)에서 "실행시각 자체가 절대 중복되지 않는 경우" 에는 가능할 수 있습니다.
단, 이 경우에도 보통은 DATETIME + AUTO_INCREMENT 복합키를 쓰는 게 안전합니다.


권장 대안

1. Auto Increment (INT, BIGINT)
가장 일반적인 PK 방식. 단순하고 충돌이 없음.

2UUID / GUID
분산 시스템, 글로벌 유니크 ID 필요할 때 적합.

3.복합키
(일자, 시퀀스) 형태로 만들어서 유일성을 확보. 예: 2025-09-25 10:00:00 + seq=1


결론:
DATETIME만으로 PK를 잡는 건 위험합니다.
→ 대신 DATETIME은 보조 컬럼(이력 추적, 조회 조건)으로 쓰고,
→ PK는 BIGINT AUTO_INCREMENT나 UUID 같은 안정적인 값을 쓰는 게 베스트입니다.