본문 바로가기
DB

VARCHAR vs CHAR

by suhsein 2024. 8. 25.
728x90

간단하게 말해 VARCHAR은 가변길이, CHAR은 고정길이로 문자를 저장한다.
아니 이미 모델링 할 때 최대 문자 갯수를 지정해줬는데? 라고 생각할 수도 있겠지만 그런 개념이 아니다.

예시

만약 최대 문자길이를 8byte로 지정한 VARCHAR(8), CHAR(8) 두 column이 있다고 치자.
VARCHAR 타입의 column에 3byte 문자를 저장한다면, 8byte를 모두 쓰지 않고 3byte만 사용하게 된다.
반면 CHAR 타입의 column에 3byte 문자를 저장한다면, 나머지 5byte를 모두 공백으로 채우고 8byte 전체를 모조리 쓰게 된다.
이런 의미에서 VARCHAR은 가변길이이다. VARCHAR 타입으로 지정하게 되는 경우 메모리 상의 이점을 얻을 수가 있다.

쓰기

쓰기에서 VARCHAR은 길이에 따라서 추가적인 오버헤드가 발생할 수 있으며, CHAR은 항상 고정길이로 같은 시간이 소요된다.
VARCHAR은 가변 길이기 때문에 입력되는 데이터의 길이를 계산한 후, 메타데이터로 함께 저장한다.(약 1-2바이트) 또한 동적으로 공간을 할당해야하므로 이러한 면에서 오버헤드가 발생하게 된다.

읽기

읽기에서도 메타데이터에 접근하는 오버헤드가 발생하기 때문에 VARCHAR의 조회가 CHAR의 조회보다 느리다고 한다.

인덱싱

인덱싱과 관련해서는 CHAR과 VARCHAR 간의 조회 성능의 차이는 없다.

왜 VARCHAR?

그럼에도 불구하고 VARCHAR를 더 많이 쓰는 이유는 무엇일까?

https://okky.kr/questions/217655

  1. 용량을 덜 차지한다. 효율적인 메모리 관리
  2. CHAR 타입 조회 시 trim 등 공백을 제거하는 추가적인 로직이 필요하다. (공백 제거를 하지 않으면 비교 실패)
  3. 위 사유들로 인해서 CHAR 사용 시 금전적 비용이 더 크게 들고, 조회 상에 VARCHAR과 CHAR 간의 시간적 비용 차이가 미미하기 때문에

결론

고정 길이를 저장할 때는 CHAR를, 가변 길이를 저장할 때는 VARCHAR를 사용하는 것이 여러 측면에서 성능 상 이점을 얻을 수 있다.

728x90

'DB' 카테고리의 다른 글

DB 개념 7편 - 함수적 종속성, 정규화(1NF~BCNF)  (1) 2024.11.14
인덱스  (0) 2024.08.25
전체 데이터 삭제 DELETE vs TRUNCATE  (0) 2024.08.25
문자열 인덱스, like문 주의사항  (0) 2024.08.25
SQL 정리  (0) 2024.08.25