내일배움캠프 TIL (230324): MySQL bigint와 int의 차이

Jiumn·2023년 4월 2일
0

bigint와 int 차이

int 데이터 타입의 범위

강사 등록 시 사업자등록번호를 입력하는 폼이 있어 데이터 타입을 int로 지정했다.

그런데 테스트해보니 일정 크기 이상의 숫자를 작성하면 2147483647로 자동적으로 입력되어 저장되는 것을 발견했다.

(사업자등록번호는 10자리를 가지는데, int 타입으로 지정하면 2147483647 이상의 10자리를 입력할 때 문제가 발생한다.)

문제는 int(정수형) 데이터 타입의 범위에 있었다.

MySQL에서 int 데이터 유형은 최대 4바이트까지 표현할 수 있어서 -2147483648 ~ 2147483647 범위의 정수를 저장할 수 있다.

bigint 데이터 타입의 범위

따라서 정수형인데 int 이상의 값을 입력하도록 하고 싶다면 bigint를 지정해줘야 한다.

  @ApiProperty({
    example: '1638437489',
    description: '사업자 법인번호. `-` 없이 입력해 주세요',
    required: false,
  })
  @Column('bigint', { name: 'business_number', nullable: true })
  business_number: number | null;

bigint는 최대 8바이트 범위의 수까지 입력이 가능해서 -9223372036854775808 ~ 9223372036854775807 사이 수를 입력할 수 있다.

부가적으로 int의 범위가 제한되어 있는 이유를 찾아봤다.
int 유형이 32비트 아키텍처를 기반으로 하기 때문인데 32비트 아키텍처에서는 4바이트가 최대 크기라서 이를 넘어가면 처리 속도가 떨어진다고 한다.

bigint로 데이터 타입을 지정하면 처리 속도가 int 보다 떨어지는 문제가 발생하지 않을까?

bigint는 int보다 메모리 사용량이 더 많아질 수는 있다. 따라서 대량의 데이터를 다루는 시스템에서는 bigint를 사용하면 메모리 사용량이 증가하여 성능 저하를 일으킬 수 있다.

하지만 대부분의 경우 int와 bigint의 처리 속도가 비슷하여 성능 차이가 크게 나지 않는다고 한다. 또한 bigint도 인덱스를 잘 활용하면 성능을 개선할 수 있다.

profile
Back-End Wep Developer. 꾸준함이 능력이다. Node.js, React.js를 주로 다룹니다.

0개의 댓글