본문 바로가기
Programming/SQL

[SQL] varchar, char 성능 상의 차이점

by 고막고막 2019. 12. 23.
  • varchar 가변길이 → 실제 문자 값만 저장
  • char 고정길이  선언한 문자열 자릿수로 저장

SQL에서 문자열 데이터 타입에는 varchar, char 두 가지가 있다. DB를 설계할 때 둘 중 어떤 것을 써야할지 고민할 때가 있다. 메모리 상의 문제가 없다고 무조건 varchar를 쓰는게 맞는 것인가?

Q) 실제 성능 상에서는 어떤 차이가 있을까?
DB의 구조를 알아보자.
DB는 Block > Extent > Segment > Table Space로 이루어져 있다.

 

<초기 셋팅 시>

메모리 상으로는 varchar 타입이 우수한 것을 볼 수 있다.

<변경 발생 시>

aaa → bbbbbb로 데이터의 변경이 일어났다.
char는 입력이 허용되는 길이까지만 데이터를 받지만, 가변인 varchar의 경우 Block을 추가로 생성하기 때문에 I/O 시간이 추가로 소모된다. 이때 사람이 체감할 수 있는 I/O 속도의 차이는 메모리로 인한 것보다 훨씬 크게 느껴진다.

결론적으로는 컬럼의 성격에 따라 판단해야 한다. 변경이 없을 것으로 예상되는 컬럼은 varchar, 변경 가능성이 높은 컬럼은 char로 셋팅하는 것이 성능이 좋다고 할 수 있다.

ex) 물류 시스템의 로그성 데이터는 한번 저장되면 변경이 거의 되지 않기 때문에 varchar를 쓰는 것이 낫다고 볼 수 있다. 커뮤니티 게시판의 경우 사용자에 의한 수정이 빈번하게 일어나기 때문에 char를 쓰는 것이 낫다고 볼 수 있다.