해당 내용은 인프런 Real MySQL 시즌1 - PART 1 강의를 참고하여 작성한 것입니다.
공통점
- 문자열 속성 값을 저장
- 최대 65,535 Bytes까지 저장 가능
차이점
- VARCHAR 타입 컬럼에는 지정된 글자 수만큼만 데이터 저장 가능
- VARCHAR(10) → 10글자 이하만 저장 가능
- TEXT 타입 컬럼은 인덱스 생성 시 반드시 Prefix 길이 지정 필요
- CREATE INDEX ix_text_column on table(text_column(100));
- 위와 같이 사용하면 앞의 100글자까지만 인덱스로 사용하겠다는 뜻
- 지정하지 않으면 에러 발생
- TEXT 타입 컬럼은 표현식으로만 디폴트 값 지정 가능
- CREATE TABLE tb1 (col TEXT DEFAULT ‘abc’) → 에러 발생
- CREATE TABLE tb1 (col TEXT DEFAULT (‘abc’)) → 생성 가능
세부 사항
일반적인 사용 형태
- 길이가 짧으면 VARCHAR 타입, 길이가 길면 TEXT 타입
VARCHAR(5000) vs TEXT?
- VARCHAR 타입은 메모리 버퍼 공간을 미리 할당해 두며 재활용 가능, TEXT 타입은 필요할 때마다 할당 & 해제
- 컬럼 사용이 빈번하고 메모리 용량이 충분하다면 VARCHAR 타입 추천
- VARCHAR(5000)과 같이 길이가 긴 컬럼들을 자주 추가하는 경우, Row 사이즈 제한(65,535 Bytes)에 도달할 수 있으므로 적절하게 TEXT 타입과 같이 사용하는 것을 권장
VARCHAR(30) vs VARCHAR(255)?
- 실제 최대 사용하는 길이만큼 명시해야 메모리 사용 효율 증가
- 디스크 공간 효율 차이도 미미하게 존재(1Byte vs 2Bytes)
VARCHAR & TEXT 주의사항
- 저장되는 값의 사이즈가 크면 Off-Page 형태로 데이터가 저장될 수 있다.
- MySQL의 InnoDB 스토리지 엔진은 하나의 레코드 크기가 데이터 페이지의 절반 크기보다 큰 경우에 레코드에서 외부로 저장할 가변 길이 컬럼을 선택하게 되고, 그렇게 선택된 컬럼은 별도 외부 페이지의 데이터가 저장된다.
-
- 실제 다른 컬럼들이 모두 저장되어 있는 본래의 데이터 페이지에는 이 외부 페이지를 가리키는 20바이트 포인터 값만 저장된다.
-
- 이 경우 쿼리에 따라 성능의 큰 차이가 발생할 수 있다.
'DB > MySQL' 카테고리의 다른 글
[MySQL] DETERMINISTIC vs NOT DETEMINISTIC (0) | 2025.10.11 |
---|---|
[MySQL] CHAR vs VARCHAR 타입 선정 (0) | 2025.10.11 |
[MySQL] Spatial Query Index 최적화(공간 쿼리 최적화) (1) | 2025.08.31 |
[MySQL] DATE 자료형 정리 (3) | 2024.11.20 |
[MySQL] 날짜, 시간 표기 방식 DATE_FORMAT() (1) | 2024.11.19 |