Cast Function: CAST(), CONVERT()
- MySQL은 비교나 검색을 수행할 때 데이터의 타입이 서로 다를 경우, 내부적으로 타입이 같아지도록 자동 변환하여 처리
- 하지만 사용자가 명시적으로 타입을 변환할 수 있도록 다양한 연산자와 함수도 같이 제공 → 한 타입의 값을 취해서 다른 타입의 값으로 사용
CAST(expression AS type)
CONVERT(expression, type)
CONVERT(expr USING transcoding_name)
SELECT CAST(20200202 AS DATE);
SELECT CONVERT(20200202, DATE);
# 2020-02-02 00:00:00
데이터 타입 선택 방법
: 데이터를 저장하는 데 적합한 데이터 타입을 고르는 것은 좋은 성능을 얻는 데 필수적
-
타입은 작을수록 좋음
- 일반적으로 데이터를 저장하고 표현하는 데 문제가 없는 데이터 타입 중 가장 작은 것 선택
- 보통 작은 데이터 타입일수록 디스크나 메모리, CPU 캐시에 더 적은 공간을 사용하기 때문
→ 더 빠를 수록,0 덜 소비할 수록 좋다!
- 하지만 저장할 값의 크기를 너무 작게 추정하지 않도록 주의
- 스키마의 이곳저곳에서 데이터 타입의 범위를 늘리는 작업은 어렵고, 시간을 많이 소모하기 때문
-
타입은 단순한 게 좋음
- 보통 간단한 데이터 타입을 처리할수록 CPU 사이클로 덜 소비함
- 문자 비교는 문자 셋 (Character set)과 콜레이션 (Collation)으로 인해 복잡해지므로, 문자 비교보다는 정수 비교가 비용이 더 저렴
- 날짜와 시간은 문자열로 저장하지 말고, MySQL의 내장 형식에 저장
- IP 주소는 정수를 이용해 저장: IP 주소를 사용할 수 있는 함수도 있음(INET_ATON 함수와 INET_NTOA 함수)
-
가능하면 NULL을 쓰지 말자
- 컬럼은 되도록 NOT NULL (NULL 허용 안 함)로 정의: NULL 허용이 기본값이다 보니 사용하는 응용 프로그램이 NULL을 저장할 필요가 없을 때조차 테이블에 NULL을 허용하는 컬럼을 포함한 경우가 많다고 함
→ NULL을 저장할 의도가 아니라면 컬럼을 NOT NULL로 정의하기
- NULL 허용 컬럼은 저장 공간도 더 많이 사용하며 NULL 허용 컬럼을 인덱싱할 땐 항목마다 한 바이트씩 더 들어간다. 만약 ‘값이 없다’라는 사실을 테이블에 기록해야 하더라도 굳이 NULL을 쓸 필요는 없을지 모른다. NULL 대신 0이나 특수한 어떤 값, 빈 문자열 등을 사용하는 걸 고려