- 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를 쓰는 것이 낫다고 볼 수 있다.
'Programming > SQL' 카테고리의 다른 글
[Oracle] view, inlineview 구조 상의 차이점 (0) | 2019.12.24 |
---|---|
[Oracle] 쿼리로 코드를 줄여보자! GROUP BY 함수 with ROLLUP, CUBE 연산자 (0) | 2019.12.24 |
[SQL] 유용한 sqlpus 편집 명령어 (0) | 2019.12.23 |
[Oracle] DB 연동 시 host, port 번호 조회 및 원격 접속하기 (0) | 2019.12.23 |
[Oracle] sqlplus 화면 크기 관련 명령어 linesize, pagesize (0) | 2019.12.23 |