최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday

티스토리 뷰

DB저장의 효율과 용량 퍼포먼스를 위해 알맞은 데이터타입의 지정과 사용의 필요성이 있다.


대략 아래를 참고하여 테이블 생성 시 속도를 향상시켜 보자.


예)


 열 이름

설명 

예 

적합한 데이터 타입 

 가격 (price)

물건 판매가 

5678.39 

DECIMAL(6, 2) 

 우편번호 (zip_code)

 5~10개의 문자

4836-3854 

 VARCHAR(10)

 원자량 (atomic_weight)

원소의 원자량 (소수점 6자리) 

4.123456 

DECIMAL(10, 6) 

 설명,가사 (Description, Lyrics)

용량이 큰 텍스트

255이상의 문자열 

  (1절) 동해물과 백두산이 마르고 닳도록 하느님이 보우하사 우리나라 만세 (2절) 남산위에 저 소나무 철갑을 두른 듯 바람 서리 불변함은 우리 기상일세...

 TEXT

 갯수 (quantity)

남아있는 물건 갯수 

239 

INT 

 세율 (tax_rate)

퍼센트 % 

3.755 

DECIMAL(5, 3) 

 책 제목 (book_title)

 문자열 

Head First SQL 

VARCHAR(50) 

 성별 (gender)

 M혹은 F의 단 하나의 문자 

CHAR(1) 

핸드폰 번호 (phone_number)

11자리 혹은 10자리 문자 

01012341234 

VARCHAR(11) 

 state

지역(주)를 나타내는 두개의 고정 문자 

 TX, CA

 CHAR(2) 

 기념일 (anniversary)

 년,월,일 

 2000-12-24 

DATE 

 이긴경기 (game_won)

이긴 경기 수를 나타냄 

15 

INT 

 미팅시간 (meeting_time)

날짜와 시간 

2015-03-19 15:03:03 

TIMESTAMP 


원래 출처(URL : http://warmz.tistory.com/232 )에서 가져온 내용을 우리나라에 맞게 조금 변형하였다. 


먼저 핸드폰 번호의 경우 아직도 10자리 ~ 11자리가 대다수 있기 때문에 VARCHAR(11)인 가변형으로 변형하여 사용.


두번째는 기념일의 경우도 우리나라 날짜 표기법에 맞추어 '년-월-일' 로 표기. 

          

              (이건 데이터 타입이라기 보다 insert 할때 주어지는 형식이지만..)


끝으로 날짜와 시간이 같이 포함되어있는 경우 '년-월-일 시간-분-초"의 형태로 저장하고 데이터는 TIMESTAMP를 권장한다.


           TIMESTAMP는 4Byte이며 DATETIME 8byte 보다 작다. 단지 유의할 것은 '1970-01-01 00:00:00'부터 2037년까지 

     

           나타낼 수 있다는 정도?


가만 보면 소수점이 존재하는 모든 실수형 데이터에 명확하게 DECIMAL로 그 범위를 지정해 주고 FLOAT나 DOUBLE 같은


부동 소수점을 가진 데이터 타입은 최대한 쓰지않은 점이 포인트인 것 같다.


가령 DECIMAL(6, 5) 인 경우 앞자리 수는 최대6자리, 뒷자리 소수점은 최대 5자리 까지 표현되도록 함을 의미한다.


가령 DECIMAL(6, 5) 인 경우 전체 숫자는 6자리, 뒷자리 소수점은 최대 5자리 까지 표현되도록 함을 의미한다. 


( MySQL 버전 5.1.41-community 기준 직접 테스트 결과 DECIMAL데이터의 경우 앞자리 숫자의 의미는 전체 숫자의 길이(length)를

  표현하는 것으로 본인이 확인함.)


성별같은 경우 M/F로 구분하는데 문자일경우 CHAR(1)로 깔끔하게 사용하는것과 마찬가지로


본인이 주로 데이터 타입판별에 0/1 로 구분하였는데 이런경우 TINYINT(1byte)로 쓰도록 한다.




댓글