티스토리 뷰

Data Enginnering /Mysql

MySQL 데이터 타입(1)

내일도이렇게 2021. 1. 10. 15:35

 

컬럼의 데이터 타입을선정하는 작업은 물리 모델링에서 빼놓을 수 없는 중요한 작업니다. 

컬럼의 타입과 길이를 선정할 때 가장 주의해야 할 사항은 

  • 저장되는 값의 성격에 맞는 최적의 타입을 선정
  • 가변 길이 컬럼은 최적의 길이를 지정
  • 조인 조건으로 사용되는 컬럼은 똑같은 데이터 타입을 선정 

무분별하게 컬럼의 길이가 크게 선정되면 디스크 공간은 물론 메모리나 CPU의 자원도 함께 낭비된다.


문자열(CHAR 와 VARCHAR ) 

공통점은 문자열을 저장할 수 있는 데이터 타입이라는 점, 차이는 고정 길이인지 가변길이 인지 여부 

 

  • 고정길이는 실제 입력되는 컬럼 값의 길이에 따라 사용하는 저장 공간의 크기는 변하지 않는다.
  • 가변길이는 최대로 저장할 수 있는 값의 길이는 제한돼 있지만, 그 이하 크기의 값이 저장되면 그 만큼 저장공간이 줄어든다.

CHAR 와 VARCHAR 타입을 결정할 때 중요한 판단 기준

  •  저장되는 문자열의 길이가 대개 비슷한가
  •  컬럼의 값이 자주 변경되는가 

하나의 글자를 저장하기 위해 CHAR(1) 과 VARCHAR(1) 타입을 사용할 때 실제 사용되는 저장 공간의 크기는 

CHAR 타입에 저장될 때는 추가적인 공간이 필요하지 않지만 VARCHAR 타입에 저장할 때는 문자열의 길이를 관리하기 위한 1~2 바이트의 공간이 추가적으로 더 사용된다.

 

 

컬럼의 값이 얼마나 자주 변경되는지가 왜 중요한지 테스트 해보자

 fd1 컬럼은 interger 타입이므로 고정 길이로 4바이트를 사용하며, fd3 또한 datetime 이므로 고정 길이로 8바이트로 사용한다. fd2 컬럼은 정확히 10바이트를 사용하면서 앞쪽의 4바이트만 유효한 값으로 채워졌고 나머지는 공백 문자로 채어져있다.

 

tb_test 테이블의 fd2 컬럼만 char(10) 대신 varchar(10)으로 변경해서 똑같은 데이터를 저장했을 때는 아래와 같이 저장된다.

 

fd2 컬럼은 5바이트의 공간을 차지하고 있는데, 첫번째 바이트에는 저장된 컬럼 값의 유효한 바이트 수, 두번째 바이트부터 실제 컬럼값이 저장된다,

 

fd2 컬럼의 값을 "ABCDE" 로 UPDATE 했다고 가정해보자.

  •  CHAR(10) 타입을 사용하고 있다면 10바이트가 준비돼있다면 변경되는 컬럼의 값을 업데이트만 하면 된다.
  •  VARCHAR(10) 타입 경우 fd2 컬럼에 4바이트 밖에 저장할 수 없는 구조로 만들어져 있어 "ABCDE" 와 같이 길이가 더 큰 값으로 변경될 때는 레코드 자체를 다른 공간으로 옮기거나 컬럼 값의 나머지 부분을 다른 공간에 저장해야 한다. 

주민등록번호처럼 항상 값의 길이가 고정적일 때는 당연히 CHAR 타입을 사용해야한다. 또한 값이 2~3바이트씩 차이가 나더라도 자주 변경될 수 있는 부서 번호나 게시물의 상태 값등은 CHAR 타입을 사용하는 것이 좋다. 

 

CHAR(10),VARCHAR(10) 컬럼을 정의하면, 이 칼럼은 10바이트를 저장할 수 있는 공간이 아니라 10글자를 저장할 수 있는 공간을 의미

  • 일반적으로 영어를 포함한 서구권 언어는 각 문자가 1바이트를 사용하므로 10바이트를 사용
  • 한국어나 일본어와 같은 아시아권 언어는 각 문자가 최대 2바이트를 사용하므로 20바이트를 사용
  • UTF-8 과 같은 유니코드는 최대 3바이트까지 사용하므로 30바이트까지 사용

Reference 

Real MySQL

 

'Data Enginnering > Mysql' 카테고리의 다른 글

MySQL 인덱스 사용규칙 (2)  (1) 2021.01.03
MySQL 인덱스 사용 규칙 (1)  (0) 2021.01.02
MySQL - login-path  (0) 2020.12.27
MySQL - mysqldump  (0) 2020.12.26
MySQL - DB Monitoring ( pmm ) 구축  (1) 2020.12.21
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/09   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
글 보관함