db 4

[DB] VARCHAR와 TEXT

VARCHAR 한 레코드에서 사용할 수 있는 최대 공간의 크기에 영향을 준다. 컬럼에 저장된 값이 큰 경우 Off-Page에 저장 최대 크기 길이 제한 충족 시 (컬럼 값의 길이(Prefix) 지정) 인덱스 생성이 가능하다. TEXT LOB(Large Object) 타입 B-Tree 외부의 Off-Page에 저장 MySQL에서는 저장 공간이 많이 필요한 경우에만 Off-Page에 저장 최대 크기 길이 제한 충족 시 (컬럼 값의 길이(Prefix) 지정) 인덱스 생성이 가능하다. Off-Page MySQL 엔진과 InnoDB 스토리지 엔진은 uchar* records[2] 메모리 버퍼를 이용하여 레코드 데이터를 주고 받는다. TABLE 구조체 내에 해당 메모리 공간이 정의되어 있으며, 여러 커넥션에서 공유..

공부/DB 2023.11.22

[DB] Index

Page란? 디스크와 메모리에 I/O가 이루어지는 데이터 Read/Write의 최소 작업 단위이다. 하나의 컬럼만 읽고 싶어도 레코드가 속한 페이지 전체를 읽어야 한다. 만약 레코드를 찾는데 1개의 페이지만으로 처리가 안된다면 추가 페이지를 읽어야 하는데, 그러한 과정은 디스크 I/O 작업로 인한 성능 저하 및 메모리 효율 저하를 불러온다. 또한, 페이지에 저장되는 데이터의 크기가 크면 메모리에 캐싱해둘 수 있는 페이지 수도 줄어들게 된다. 따라서 페이지에 저장되는 개별 데이터의 크기를 최대한 작게 하여 1개의 페이지에 많은 데이터가 담기도록 하는 것, 그리하여 액세스하는 Page 수를 최대한 줄이는 것이 DB 성능 개선에 매우 큰 영향을 준다. Extent란? 연속된 Page(=Block)를 정해진 수..

공부/DB 2023.11.14

[DB] Charset, Collation, utf8mb4

Charset 문자를 표현하기 위해 각 문자를 정수값에 대응시켜 놓은 체계. 글자나 기호들의 집합을 정의한 것으로, 인코딩의 집합이자 문자 데이터에 대한 저장공간 크기의 정의이다. 문자가 깨지거나 이상한 값으로 저장되는 경우, 해당 Charset에 정의(지원)되지 않은 문자 데이터를 저장했기 때문이다. 말하자면 Charset은 컴퓨터와 정의한 암호표이다. 데이터를 메모리에 저장을 할 때는 이진수의 숫자값으로 저장하게 되는데, 문자를 어떤 숫자로 정의할 것인지(인코딩), 그리고 숫자값을 문자화 시킬 때 데이터를 얼만큼의 크기로 읽어서 어떤 문자로 변환할 것인지(디코딩)를 정하는 데에 사용되는 암호표가 Charset이라고 할 수 있다. DB에서 주로 사용하는 Charset은 latin1, euckr, utf..

공부/DB 2023.11.09

[DB] CHAR과 VARCHAR

CHAR CHAR는 고정 사이즈로 무조건 처음 선언된 크기만큼 소모된다. 문자열을 채우고 남는 공간은 공백으로 채우게 된다. 값을 받아올 때는 공백이 자동으로 제거됨 공백까지 읽고 싶다면 PAD_CHAR_TO_FULL_LENGTH 모드 활성화 필요 고정길이 데이터 컬럼에 적합 CHAR열의 최대 크기는 255 바이트 VARCHAR 가변 길이 데이터 삽입 시 255글자 이하에는 1바이트, 이상에는 2바이트의 추가 공간 필요 길이 정보 + 실제 데이터로 이루어져 있다. 길이가 다양한 컬럼, 혹은 정의된 길이와 실제 데이터 길이에 차이가 있는 컬럼에 적합 VARCHAR로 저장된 값을 변경하려고 할 때, 변경할 값이 저장된 사이즈보다 크다면 새로운 저장 영역에 새로 할당해야 하므로 데이터 파편화가 발생할 수 있다..

공부/DB 2023.11.07