본문 바로가기

백엔드

[DB 설계] PK에 더 적합한 자료형은 varchar? bigint?

728x90

PK(Primary Key)는 bigint 타입으로 설정하는 게 좋다.

 

회원 db를 설계할 때 email이나 사용자가 설정하는 id를 pk로 사용할까 했는데(varchar 타입), ERDCloud에서 db설계한 자료를 참고하니 대부분 pk를 bigint 자료형으로 써서 왜 그런걸까 찾아봤다.

 

  1. pk는 변하지 않는 값을 써야한다.
    • id나 email이 아무리 변하지 않고 중복되지 않는 값이라 하더라도, 혹시 모를 상황에 이를 변경할 경우가 발생하기 때문에 pk로 잘 쓰지 않는다.
  2. join 시 연산속도가 더 빠르다.
    • pk는 다른 테이블에 fk로 활용되는 경우가 많은데, 이때 varchar보다 bigint가 저장공간을 덜 차지한다.
    • join 연산이 좋으면 인덱스 성능도 더 좋다.

 

대표적으로 위 두가지 이유가 있었다.

처음에는 pk를 위해 별로 필요하지 않는 칼럼을 하나 더 생성하는 게 더 비효율적이라고 생각했는데, join을 생각했을 때나 더 크게 봤을 때는 실제로 프로그램을 사용하는 유저가 직접적으로 사용하진 않더라도 int 형태로 pk를 생성하는 게 더 효율적이라는 사실을 알게 됐다.

 

 

추가로 int 보다 bigint를 쓰는 이유는,

int(4byte), bigint(8byte)로 bigint가 더 공간을 많이 차지해서 작은 규모의 프로젝트라면 int 형을 쓰는 게 공간을 절약할 수 있으나, 이 역시 앞으로 프로그램을 더 확장했을 때를 생각한다면 bigint를 쓰는 게 더 좋다. 프로그램 규모가 커지고 나서 int를 bigint로 변경하는 것이 더 번거롭고 오래 걸린다.

반응형