CHAR vs VARCHAR
저장방식
CHAR은 고정 길이의 문자열로, 지정된 길이보다 짧은 문자열을 저장할 경우 나머지 공간을 공백으로 채운다. 따라서 저장되는 데이터의 길이가 일정하지 않으면 저장공간이 낭비된다.
VARCHAR 은 가변길이를 갖는다. 저장되는 데이터 크기에 딱 맞게 데이터 공간이 배정된다.
그래서 더 긴 길이의 문자로 수정되야 한다면 레코드 전체를 다른 곳으로 옮겨서 새로 저장해야 된다.
=> CHAR은 저장공간이 낭비되고 VARCHAR은 수정에 대한 성능이 떨어진다.
성능차이
그렇다고 VARCHAR이 성능이 떨어지는 건 아니다.
CHAR는 항상 고정된 길이로 데이터를 저장하기 때문에, 문자열 검색 시에 불필요한 공백까지 비교해야 한다.
=> 문자열 탐색 및 조회에서 VARCHAR에서의 성능이 더 좋다
정리해보면 VARCHAR은 수정에 대한 성능이 떨어지는 대신에 문자열 탐색 및 조회에서 더 빠르다.
하지만 웹 서비스에서 일반적인 데이터는 조회, 수정, 삽입, 삭제 중 조회의 성능이 가장 중요하다
대부분의 경우 쓰기, 삽입 삭 대비 조회의 비율이 압도적으로 많기 때문이기 때문이다.
인덱스
CHAR은 일반적으로 빠른 검색을 위해 인덱스를 사용하기 좋다.. 고정된 길이의 데이터는 인덱스를 통한 검색이 빠르게 이루어질 수 있다.
VARCHAR의 경우 길이가 가변적이기 때문에 인덱스를 사용할 때 조금 더 주의가 필요하다.
제약은 DB단에서 유효하지 않는 데이터를 거를 수 있게해주고 이는 무결성을 높히는데 도움을 준다.
허용 가능한 값의 범위를 지정해주는 것이 좋다.