[인프런] Real MySQL 시즌 1
# 강의/[인프런] RealMySql 시즌 1

[인프런] Real MySQL 시즌 1

 

주제

  • 시즌 1의 강의 내용 요약

 


 

1. CHAR vs VARCHAR

1.1 특징

1.1.1 공통점과 차이점

  • 공통점
    • 문자열 저장용 컬럼
    • 최대 저장 가능 문자 길이를 명시(바이트 수가 아님)
      • 문자 마다 용량이 다르기 때문에 최대 저장 가능 문자 길이를 10으로 설정하면
      • 알파벳 10 바이트
      • 한글 30바이트(utf8mb4)
      • 이모지 40바이트까지 사용 가능
  • 차이점
    • CHAR
      • 최대 설정된 길이만큼 항상 저장 공간을 할당
      • 최대 저장 길이 255
    • VARCHAR
      • 저장되는 문자의 길이만큼만 저장 공간 할당
      • 최대 저장 길이 16383
      • 저장된 값의 길이를 관리하기 위해 1~2 바이트 사용함

 

1.1.2 저장 공간

라틴 문자 abcd를 CHAR(10), VARCHAR(10)에 각자 저장한다고 했을 때

1) CHAR(10) 의 경우
■ ■ ■ ■ ■ ■ ■ ■ ■ ■ 

abcd(4바이트) 와 빈 공간(6바이트) 를 차지하여 10 바이트 사용중

2) VARCHAR(10)의 경우
■ ■ ■ ■ ■ □ □ □ □ □

abcd(4바이트) + 길이 저장용 1바이트가 사용됨

 

 


UTF8MB4를 CHAR(10), VARCHAR(10)에 각자 저장한다고 했을 때

1) CHAR(10)의 경우

최대 저장 바이트 4바이트 x 10인 40바이트를 예약 하는게 아니라,
문자의 개수보다 바이트 수로 빈 공백 공간을 예약하도록 작동

안녕을 저장한다고 했을 때
■ ■ ■ ■ ■ ■ □ □ □ □
6+4 저장

안녕안녕을 저장한다고 했을 때
■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■
CHAR(10) 컬럼에 12바이트 사용, 예약하는 빈 공간 없음


2) VARCHAR(10)의 경우
문자셋에 관계 없이 꼭 필요한 만큼만 공간 사용
(즉 문자당 바이트 용량이 관계 없다)

 

 

CHAR 예약해 두는 빈 공간이 단순히 부족한 글자 수만큼이 아니며 
가변 길이로 작동하는 문자 셋의 경우 VARCHAR와 비슷하게 작동할 수 있다

 

 

 

1.2 적절한 용도

 

일반적으로 고정된 길이의 값 저장은 CHAR 타입, 그 외의 경우 VARCHAR를 저장해야 한다는 기준으로 알려져 있다

이 기준대로면 주민등록번호는 CHAR(13), VARCHAR(13) 뭘 저장해야 하니? 거의 차이 없고 VARCHAR에 1바이트를 더 많이 차지하겠지만 서비스엔 거의 영향 없다.

 

공간을 미리 예약하느냐 아니냐의 차이가 가장 중요한 점

 

  • 저장되는 문자열의 최소/최대 길이 가변 폭이 큰 경우 CHAR 타입은 비효율적
    (예약하는 공간이 존재하기 때문에 공간 낭비 발생)
  • 저장되는 문자열의 최소/최대 길이 가변 폭이 작은 경우 CHAR 타입 써도 그렇게 낭비가 크지 않다
  • 값이 자주 변경되는 경우 CHAR 타입을 사용해야 한다

 

 

1.3 컬럼 값의 길이 변경 시의 작동 방법

1) VARCHAR(10) INSERT

2) VARCHAR(10) 레코드 UPDATE

 

- 빈 공간을 찾기 위한 데이터 페이지 관리 작업이 필요

 

 

3) CHAR(10) INSERT

4) CHAR(10) 레코드 UPDATE

 

이미 공간을 확보했기 때문에 UPDATE가 되더라도 복잡한 과정이 이뤄지지 않음

 

 

 

1.4 정리) 문자열 타입 선정

VARCHAR 보다 CHAR 선택해야 하는 경우

값의 가변 길이 범위 폭이 좁고, 자주 변경되는 경우

특히 인덱스된 컬럼인 경우

 

이런 경우에 VARCHAR 사용했을 때 데이터 페이지 내부의 조각화 현상이 잦아지고, 공간 효율이 떨어진다.

 

 

 

 

2. VARCHAR vs TEXT

2.1 특징

2.1.1 공통점과 차이점

  • 공통점
    • 문자열 속성 
  • 차이점

 

 

 

 


3. 제목

3.1 소제목

3.1.1 #CFF0CC

 

 

 


4. 제목

4.1 소제목

4.1.1 #CFF0CC

 

 

 


5. 제목

5.1 소제목

5.1.1 #CFF0CC

 

 

 

 

 


6. 제목

6.1 소제목

6.1.1 #CFF0CC

 

 

 


7. 제목

7.1 소제목

7.1.1 #CFF0CC

 

 

 


8. 제목

8.1 소제목

8.1.1 #CFF0CC

 

 

 

 


9. 제목

9.1 소제목

9.1.1 #CFF0CC

 

 

 

 

 



10. 제목

10.1 소제목

10.1.1 #CFF0CC

 

 

 

 



11. 제목

11.1 소제목

11.1.1 #CFF0CC

 

 

 



12. 제목

12.1 소제목

12.1.1 #CFF0CC

 

 

 

 

 

 

 

 

 

 

 


 

 

# 참고자료

  •  
  •  
  •  
728x90