-
[MySQL] CHAR VARCHAR TEXTMySQL 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