ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [MySQL] CHAR VARCHAR TEXT
    MySQL 2024. 10. 1. 01:13

    [CHAR]

     

    고정형
    글자를 한개를 넣든 두개를 넣든 항상 8바이트의 공간을 차지
    그래서 INSERT나 UPDATE가 일어나면 일단 DB에 밀어넣고 남는 부분을 공백으로 채움

     


    [VARCHAR(VARIABLE CHAR)]

     

    가변형
    글자를 한개 넣으면 1바이트, 2개를 넣으면 2바이트로 바뀌어서 저장됨
    즉 공간을 필요한 만큼만 차지하게 만들어줌
    즉 VARCHAR은 INSERT나 UPDATE가 있을때 현재 자신이 차지하고 있는 영역이 얼마인지 확인하고
    부족한 경우 더 할당하고 남으면 줄여서 INSERT 함.

     


    [TEXT]

     

    가변형

    길이 제한이 없다

     


    [CHAR VS VARCHAR?]

     

     

     

    차이점
    CHAR의 경우 데이터가 낭비될 수 있지만
    추후 연산이 필요없기 때문에 검색속도 및 읽히는 속도가 VARCHAR에 비해 빠르다
    그래서 글자수가 고정되는 경우에 사용하면 데이터를 보다 효율적으로 관리할 수 있음
    ex) 주민등록번호, 전화번호, 사원번호등

    VARCHAR는 입력받은 데이터의 크기가 작을 경우 그 크기만큼만 메모리를 차지하므로 메모리 사용량을 줄일 수 있다.

    공통점
    1. 문자열을 데이터 타입으로, ' '로 묶어서 값을 나타냄
    2. 대소문자를 구분한다!
    3. 한글은 한글자당 3바이트, 영문자는 알파벳 하나당 1바이트
    4. 길이가 고정되어있기 때문에 정해진 값보다 큰 값이 들어오면 에러 터짐

     


    [VARCHAR VS TEXT?]

     

    VARCHAR는 INDEX의 일부로 사용가능한데

    TEXT는 INDEX의 일부로 사용할 수 없다

    인덱스란 데이터베이스에서 책의 목차와 같은 역할을 한다

    그래서 데이터베이스에서 특정 칼럼에 인덱스를 설정해놓으면 해당 칼럼을 기준으로 데이터를 빠르게 조회할 수 있도록 해준다

    즉, 인덱스는 검색 속도를 최적화하는데 일조한다

    하지만 인덱스를 만들면 데이터 삽입/수정/삭제 작업에는 약간의 부하가 생길 수 있다(인덱스도 업데이트 해야되므로)

     

    그래서 다시 본론으로 들어가면

     

    VARCHAR은 길이가 비교적 짧은 데이터를 다루기 때문에 인덱스를 쉽게 적용할 수 있다

    하지만 TEXT는 너무 긴 텍스트이기 때문에 인덱스를 적용하기에 어렵다

    따라서 풀 테이블 스캔을 통해 브루트포스로 찾는 경우가 많다

    'MySQL' 카테고리의 다른 글

    [MySQL] JOIN 연산  (1) 2024.10.19
    [MySQL] 비트연산  (0) 2024.10.04
    [MySQL] WHERE IN 서브쿼리  (0) 2024.09.17
    [MySQL] 꿀팁 몇가지  (0) 2024.09.16
    [MySQL] DATE 관련  (0) 2024.09.16