데이터베이스 데이터타입과 최적화

데이터베이스에 사용되는 칼럼의 데이터타입이 뭐가있는지 알아보고 어느상황에 어떻게 사용하면 좀더 나은 최적화를 할수있을지 알아보도록 하자

 

 

 

 

문자형 데이터타입


말그대로 문자를 저장할수있는 타입이다 (ex '안녕', 'ABC', '123')

 

데이터타입 설명
CHAR(n) 고정된 길이의 데이터타입 지정된 길이보다 작은 길이의 데이터가 입력될경우에는 나머지가 공백으로 채워진다
VARCHAR(n) 가변된 길이의 데이터타입 지정된 길이보자 작은 길이의 데이터가 입력될경우에는 해당 길이만큼만 채워진다
TINYTEXT 최대 255Byte의 문자열 데이터 타입
TEXT 최대 65535Byte의 문자열 데이터 타입
MEDIUMTEXT 최대 16777215Byte의 문자열 데이터타입
JSON .JSON타입의 문자열 데이터
JSON 타입의 데이터는 '{ "age" : "21", "name" : "홍길동" }' 이런식으로 저장될수있다 

 

 

 

 

 

 

 

숫자형 데이터타입


숫자가 들어가는 데이터타입으로써, 주로 연산과 같은 작업을 할때 필요할때 숫자형 데이터타입을 사용한다

 

 

데이터타입(정수) 설명
TINYINT -128 ~ 127 까지의 정수형 데이터 타입(1Byte)
SMALLINT -32768 ~ 32767 까지의 정수형 데이터 타입(2Byte)
MEDIUMINT -8388608 ~ 8388607 까지의 정수형 데이터 타입
INT -2147483648 ~ 2147483647 까지의 정수형 데이터 타입
(4Byte)
BIGINT 그이상의 숫자를 표현할수있는 정수형 데이터 타입

 

 

데이터타입(실수) 설명
FLOAT(길이, 소수) 부동 소수형 데이터타입(4Byte)
DECIMAL(길이, 소수) 고정 소수형 데이터 타입
DOUBLE(길이,소수) 부동 소수형 데이터타입(8Byte)
Float는 소수점의 위치가 데이터의 형태에 따라 달라지며, DECIMAL은 Float, Double과 달리 오차가 거의없다

 

숫자형 데이터 타입은 뒤에 UNSIGHED를 붙혀 음수를 허용하지않고 양수만 허용할수있다

UNSIGHED 정의할경우 맨앞 -, +구분하는 부호가 자릿수로 사용되어 기존 TINYINT가 -128 ~ 127 이라면 0 ~ 256으로 올려줄수있다

 

 

 

 

날짜형 데이터타입


데이터타입 설명
DATE 년도, 월, 일 형태의 데이터타입(3Byte)
TIME 시, 분, 초 형태의 데이터 타입(3Byte)
DATETIME 날짜와 시간 형태의 데이터타입(8Byte)
(시스템 날짜, 시간 변경시에도 변경된 값을 저장하지 않는다)
TIMESTAMP 날짜와 시간 형태의 데이터 타입(4Byte)
(시스템 날짜, 시간 변경시 그날짜와 시간이 저장된다)
YEAR 년도 데이터 타입(1Byte)

 

 

 

 

 

이진(Binary) 데이터타입


데이터타입 설명
BINARY(n) 문자형태의 이진 데이터 타입(255Byte)
VARBINARY(n) 가변 문자열 형태의 이진 데이터 타입(65535Byte)
TINYBLOB(n) 이진 데이터 타입(255Byte)
BLOB(n) 이진 데이터 타입(65535Byte)
MEDIUMBLOB(n) 이진 데이터 타입(16777215Byte)
LONGBLOB(n) 이진 데이터 타입(4294967295Byte)

 

 

 

 

 

데이터 타입을 선택하는 팁


데이터 베이스에서 데이터타입을 정할때 값은 정수지만 그안에서도 다양한 타입의 정수형 타입을 제공하는것을 볼수있다

그렇다면 이것들을 언제 써야 좀더 선택이 될수있을까? 정답은 아니지만 그래도 어느정도 기준은있다

 

- 최대한 타입은 작게 사용하도록 한다

 

우리가 사이트를 만들때 댓글번호를 기본키로하는 테이블을 정의했다고 했을때 보통 댓글수는 1000개 이상 넘어가기 힘들다 그러므로 댓글에 비중이 크지않은 사이트에서는 TINYINT UNSIGHED 같은 타입으로 최대한 범위에서 생각해보도록 하자 숫자형 타입의 변수는 UNSIGHED(양수만 저장)를 통해 맨앞 부호를 자리수로 사용할수있다

 

- NULL은 지양하자

 

사실 우리가 테이블을 만들때 필수값들에 NOT NULL을 정의하곤 한다 만약 이를 정의하지 않게되면 프로그램에서 NULL을 저장할 필요가 없을대 테이블에 NULL을 허용하는 경우가 많은데 이왕이면 NOT NULL로 선언하고 DEFAULT를 통해서 기본값을 초기화 시켜주는것이 좋다

 

 

 

 

 

-