계기
스타트업 과제 전형을 준비하다가 기업에서 셋팅해서 넘겨준 테이블에 PK 칼럼의 데이터 타입이 BIGINT로 설정되어 있는 것을 확인했다. 이때까지 별생각 없이 PK 칼럼이든 숫자 데이터가 들어가는 칼럼은 무의식적으로 INT로 설정하였는데 이 두 데이터 타입의 차이점은 무엇인지 궁금해졌다. 그리고 차이점을 이해하고 문제가 없다면 지금 구현하고 있는 토이 프로젝트 DB 설계에 접목해보고 싶었다.
탐구
MySQL 8.0 Manual의 내용으론 INT와 BIGINT의 차이점으로는 Storage와 MIN, MAX Value이다. INT는 음수를 포함하지 않는다면 약 43억에 근접하는 숫자까지 MAX Value로 가질 수 있고, BIGINT는 엄청난 숫자 데이터를 MAX Value로 가지게 된다. 사실 억 이상의 데이터가 오고 가는 큰 서비스가 아니고서야 INT 타입을 사용해도 문제가 될 건 없겠지만, ERD Cloud에서 봤던 당근마켓의 ERD나 규모가 있는 서비스 회사에서 왜 BIGINT로 설정하는지 이해가 되었다.
그렇다면 성능엔 차이점은 없을까?
내가 주의 깊게 보았던 것은 저장 크기였다. BIGINT가 Storage 값이 2배나 크기 때문에 MySQL 메모리에서 차지하는 메모리가 INT보다 클 것이다. 그러므로 이론적으론 BIGINT 칼럼의 성능이 더 안 좋을 수밖에 없다. 하지만 그게 유의미할 정도의 성능 저하가 나타나는가는 잘모르겠다. 여러 블로그를 찾아봤지만 아무래도 억 단위가 넘어가는 데이터를 핸들링할 일이 거의 없다 보니 참고할 수 있는 래퍼런스가 많이 없었고 다들 유의미한 성능 차이는 없을 것이라고 보았다. 나도 공감하지만 공식적인 문서에 오피셜하게 다뤄진 내용이었다면 더욱 신뢰할 수 있었을 텐데 아쉽다.
참고문서: https://dev.mysql.com/doc/refman/8.0/en/