Database/Mysql 46

[Real MySQL] 8-8. 인덱스: 클러스터링 인덱스

백은빈, 이성욱 님의 "Real MySQL" 책을 정리한 포스팅 입니다. 1. 클러스터링 인덱스프라이머리 키 값을 기준으로 정렬하여 저장하는 방식InnoDB 에서는 테이블 자체가 클러스터링 인덱스 구조로 관리됨 (InnoDB 전용 기능) B+Tree 자료구조레코드 저장 방식클러스터링 인덱스는 인덱스 알고리즘이 아니라 테이블의 저장 방식임테이블 자체가 프라이머리 키를 기준으로 정렬된 하나의 거대한 인덱스 구조로 관리됨프라이머리 키 값 기준 가까운 레코드들이 물리적으로 인접하여 저장됨 프라이머리 키를 기준으로 레코드가 묶여서 저장됨범위 검색이나 프라이머리 키 기반 조회가 매우 빠름 쓰기 성능 고려프라이머리 키 순서대로 입력하면 성능이 좋음키 값이 변경되면 물리적으로 리프 노드의 위치가 변할 수 있음 장점프라..

Database/Mysql 2024.09.07

[Real MySQL] 8-9. 인덱스: 유니크 인덱스

백은빈, 이성욱 님의 "Real MySQL" 책을 정리한 포스팅 입니다. 1. Unique Index유니크 제약테이블에 특정 컬럼의 값이 중복되지 않도록 보장하는 제약유니크 제약이 설정된 컬럼은 같은 값이 두 번 이상 저장되지 않도록 함인덱스와 밀접한 연관이 있음MySQL에서는 인덱스 없이 유니크 제약을 설정할 수 없음내부적으로 인덱스를 자동으로 생성하여 중복 값 체크를 수행함 Nullable해당 컬럼에 NULL 값이 허용된다는 의미NULL은 특정 값이 없다는 표시이며, 다른 값들과 다르게 취급됨 즉 NULL은 값 없음을 의미할 뿐, 다른 값들과는 비교할 수 없음NULL이 여러 번 있을 수 있음NULL은 특정 값이 아니기 때문에 같은 컬러멩서 두 개 이상의 NULL값이 허용될 수 있음 유니크 인덱스와 일..

Database/Mysql 2024.09.07

[Real MySQL] 5-2. 트랜잭션과 잠금: 격리 수준

백은빈, 이성욱 님의 "Real MySQL" 책을 정리한 포스팅 입니다. 4. 격리 수준여러 트랜잭션이 동시에 처리될 때, 특정 트랜잭션이 얼마나 독립적으로 실행될 수 있는지 정의다른 트랜잭션의 중간 결과에 얼마나 영향을 안받을 지다른 트랜잭션에서 변경한 데이터를 얼마나 볼 수 있게 허용할지뒤로갈수록 고립도는 높아지고, 동시성과 성능은 떨어집니다. 종류격리 수준설명허용되는 현상성능일관성READ UNCOMMITTED커밋되지 않은 데이터도 읽기 가능Dirty Read매우 높음매우 낮음READ COMMITTED커밋된 데이터만 읽기 가능. 동일 쿼리 결과가 다를 수 있음Non-Repeatable ReadPhantom Read높음중간REPEATABLE READ(InnoDB 기본값)트랜잭션 내에서는 항상 동일한 데..

Database/Mysql 2024.08.10

[Real MySQL] 15-4. 데이터 타입: JSON

백은빈, 이성욱 님의 "Real MySQL" 책을 정리한 포스팅 입니다. 1. JSON이진 형태일반적인 문자열 저장 방식보다 빠른 검색 및 업데이트 가능 BSON (Binary JSON)NoSQL에서 사용하는 JSON의 바이너리 표현내부적으로 JSON 데이터를 BSON 형식으로 변환하여 읽고 씀 BLOB데이터가 작을 경우, 하나의 페이지에 저장됨데이터가 클 경우, 여러 페이지로 나뉘어 저장됨 (최대 4GB까지) 구조JSON 정보JSON 타입, 애트리뷰트 수, 총 데이터 길이 Key - Value주소(offset), 길이, 값, (타입) 2. 명령어생성CREATE TABLE employees ( id INT AUTO_INCREMENT PRIMARY KEY, info JSON NOT NULL); ..

Database/Mysql 2023.11.26

[Real MySQL] 15-3. 데이터 타입: 날짜와 시간

백은빈, 이성욱 님의 "Real MySQL" 책을 정리한 포스팅 입니다. 1. 날짜와 시간타입설명저장 크기 (byte)YEAR연도만 저장 (YYYY)1 byteDATE날짜 (YYYY-MM-DD)3 byteTIME시간 (HH:MM:SS)3 ~ 5 byteTIMESTAMP날짜 + 시간 (UTC 기준)4 ~ 7 byteDATETIME날짜 + 시간 (로컬 시간 기준)5 ~ 8 byte 2. 밀리초 저장괄호괄호안의 숫자는 밀리초 자리 수를 의미함최대 6자리까지 표현할 수 있습니다.2자리당 1바이트씩 공간이 필요합니다. 예더보기DATETIME(6) 3. 타임존날짜 타입타임존 정보가 포함되지 않음클라이언트로부터 입력된 값을 그대로 저장하고 조회합니다. 시간 타입항목TIMESTAMPDATETIME타임존 처리✅❌저장 기..

Database/Mysql 2023.11.26

[Real MySQL] 15-2. 데이터 타입: 숫자

백은빈, 이성욱 님의 "Real MySQL" 책을 정리한 포스팅 입니다. 1. 정확도구분설명대표 타입참값입력한 값을 정확히 그대로 저장하고 조회INTEGER, DECIMAL근삿값 (부동소수점)저장된 값이 입력값과 유사하지만 정확하지 않을 수 있음FLOAT, DOUBLE 2. 포맷포맷 종류설명대표 타입이진 표기법숫자를 2진수(binary)로 변환하여 저장메모리 효율 높음INTEGER, FLOAT, DOUBLE십진 표기법숫자의 각 자릿값을 4비트(BCD) 또는 1바이트 단위로 저장정밀도 높음DECIMAL 3. 정수타입크기 (byte)최솟값최댓값TINYINT1–128127SMALLINT2–32,76832,767MEDIUMINT3–8,388,6088,388,607INT4–2,147,483,6482,147,483..

Database/Mysql 2023.11.26

[Real MySQL] 15-1. 데이터 타입: 문자열

백은빈, 이성욱 님의 "Real MySQL" 책을 정리한 포스팅 입니다. 1. 저장 공간타입항목CHARVARCHAR저장 방식고정 길이가변 길이 (입력한 데이터 길이 + 길이 접두사 저장)남는 공간 처리부족한 공간은 공백으로 채움남는 공간 없음검색 속도빠름느림 (길이 접두사로 인한 오버헤드)길이 접두사없음있음 (255B 이하: 1바이트, 256B 이상: 2바이트)저장 공간 제한최대 255자row 최대 크기내에서 가능 (길이 접두사 포함)전체 Row 크기 제한상대적으로 영향 적음다른 컬럼 사용량에 따라 제한됨 (여유 공간 내에서 사용 가능) 2. 대용량64KB 이상의 데이터를 저장할 때 사용가변 길이 타입별도의 공간에 저장됨 타입항목TEXTBLOB데이터 용도문자열 데이터이진 데이터 (이미지, 파일 등)문자 ..

Database/Mysql 2023.11.26

[Real MySQL] 8-3. 인덱스: 알고리즘 - B-Tree Index

백은빈, 이성욱 님의 "Real MySQL" 책을 정리한 포스팅 입니다. 1. B-Tree Index가장 기본적인 인덱스 타입원래 값을 변형시키지 않는 인덱스 구성 요소항목설명트리 구조- 하나의 인덱스 = 하나의 B+ Tree- 루트 → 중간 노드 → 리프 노드- 깊이는 데이터 양과 키 크기에 따라 증가페이지 (Page)- InnoDB의 읽기/쓰기 최소 단위- 기본 크기: 16KB (innodb_page_size)- 하나의 노드 = 하나의 페이지노드 (Node)- B+ Tree를 구성하는 단위- (인덱스 키 값 : 자식 노드 주소) 형태로 저장됨- 리프 노드는 실제 데이터 주소를 가짐- 리프 노드- Primary Key Index: key → record 주소- Secondary Key Index: ke..

Database/Mysql 2023.11.25

[Real MySQL] 8-2. 인덱스

백은빈, 이성욱 님의 "Real MySQL" 책을 정리한 포스팅 입니다. 1. 인덱스데이터를 빠르게 찾을 수 있도록 도와주는 자료구조항목설명형식key-value 형식정렬 방식특정 컬럼 값을 기준으로 정렬하여 저장 (항상 정렬 유지) 알고리즘알고리즘설명B-Tree- 기본 인덱싱 방식- 범위 검색 효율적Hash Index- 컬럼 값을 해시 계산하여 인덱싱- 매우 빠름 (주로 인메모리 기반의 데이터베이스에서 사용)- 정확히 일치하는 검색만 가능 (범위/부분 검색 불가) 2. 구분Key종류설명Primary Key- 행을 대표하는 컬럼- 유일성 보장- Not Null- "키 값 - 레코드 주소"로 구성Secondary Key- 보조 검색용 인덱스- 유일성 보장 ❌- Nullable- "키 값 - PK 값"으로 구..

Database/Mysql 2023.11.25

[Real MySQL] 5-1. 트랜잭션과 잠금: 트랜잭션

백은빈, 이성욱 님의 "Real MySQL" 책을 정리한 포스팅 입니다. 1. 트랜잭션하나의 논리적인 작업 단위로 실행되는 일련의 연산DML 문을 하나의 트랜잭션으로 묶어 실행할 수 있음 특징항목설명Atomicity (원자성)All or Nothing- 트랜잭션 내 모든 작업이 전부 수행되거나 전혀 수행되지 않음.- 오류 발생 시 전체 롤백. → Partial Update 방지, 데이터 정합성 보장Consistency (일관성)트랜잭션 전후로 데이터베이스의 무결성 제약조건이 항상 유지됨. 예: 외래 키, 고유 제약조건 등이 깨지지 않음Isolation (격리성)트랜잭션이 다른 트랜잭션의 영향을 받지 않고 독립적으로 수행됨. → 동시성 문제가 없도록 보장Durability (지속성)커밋된 트랜잭션의 결과는..

Database/Mysql 2023.11.24