HomeAboutMeBlogGuest
© 2025 Sejin Cha. All rights reserved.
Built with Next.js, deployed on Vercel
🛁
공부기록
/
🧑🏻‍💻
TIL
/
TIL - 42(Pro DB)

TIL - 42(Pro DB)

태그
협업
문서화
DB
날짜
Jun 3, 2022
속성
 

테이블 설계 또한 잘하자.

테이블을 설계할 때 타입도 잘 정의하자

  • CHAR vs VARCHAR
    • CHAR(100) 에 ‘abc’가 들어가는 경우 → 계속 100만큼의 용량을 점유
    • VARCHAR(100)dp ‘abc’가 들어가는 경우 → 길이를 3으로 줄이므로 그만큼 용량을 줄인다.
      • resize 과정이 포함되기 때문에 insert 시간이 늘어난다.(20퍼센트 정도 느려진다고함)
    • 주민번호, 전화번호 등 길이의 편차가 작은 문자열에는 CHAR
    • 이름, 주소, 게시글 제목/내용 등 길이의 편차가 큰 문자열에는 VARCHAR
    • CHAR의 max length는 255, VARCHAR의 max length는 65535
    • CHAR(256) 이상을 쓰고싶다면?
      • 어쩔 수 없지만 VARCHAR를 사용해야함
  • VARCHAR(16) 이나 VARCHAR(9999)나 똑같다?
    • 길이가 2인 문자열만 넣는다? → resize되므로 insert된 row가 차지하는 용량에는 차이가 없다.
    • LENGTH 함수에 넘겨지거나 값 비교를 하거나 할 때 max length에 해당하는 메모리를 준비
      • VARCHAR(16)은 1바이트의 정수를 준비
      • VACHAR(9999)는 2바이트의 정수 준비
      • 때문에 max length가 클수록 메모리를 더 많이 사용할 수 있음(눈에 띄는 정도는 아님)
    • max length가 큰 문자열은 index로 사용되엇을 때 문제를 일으킬 수 있음
      • 사이즈가 커서 index로 등록이 불가능하거나
      • INSERT/UPDATE/DELETE 퍼포먼스가 크게 저하되거나
        • index는 데이터를 순차적으로 저장할 수 있또록, 데이터에 변동이 생길 때마다 정렬을 수행한다.
        • 정렬을 위해 데이터를 비교할텐데, 길이가 길면 그만큼 비교가 오래걸린다.
    • 가능한 작게 준비하자.
  • TEXT 타입들
    • TINYTEXT, TEXT, MEDIUMTEXT, LONGTEXT
    • resize를 수행함
    • 제약이 좀 있다.
      • 최대 길이를 제한할 수 없음
      • 최적화 여지는 있다.
  • INT도 동일하다. TEXT와 동일하다.
    • 최대한 작은 타입