1. DB 물리구조
1️⃣ 저장 구조의 핵심 개념
1) 디스크 기반 저장
- DB는 메모리가 아니라 디스크(HDD/SSD)에 데이터를 저장
- 성능의 핵심은 CPU가 아니라 디스크 I/O
➡️ 결론
- 디스크 접근 횟수 = 성능
- 따라서 물리구조 이해는 곧 성능 이해
2) 블록 단위 I/O
- DB는 데이터를 행(Row)이 아니라 블록(Block) 단위로 읽고 쓴다
- 블록 = DB I/O의 최소 단위 (보통 4KB ~ 16KB)
➡️ 중요한 착각 깨기
- ❌ “행 하나 조회하면 행만 읽는다”
- ✅ “행이 포함된 블록 전체를 읽는다”
2️⃣ 저장 계층 구조
1) 전체 계층 구조
디스크 → 테이블스페이스 → 세그먼트 → 익스텐트 → 블록 → 행(Row)2) 블록 (Block)
- 실제 데이터가 저장되는 최소 물리 단위
- 여러 개의 행이 하나의 블록에 들어감
- 특징
- 하나의 블록을 읽으면 여러 행을 같이 가져옴
- 그래서 공간 배치가 중요
3) 익스텐트 (Extent)
- 연속된 블록 묶음
- 일정 크기로 할당됨
- 이유
- 블록을 하나씩 할당하면 비효율적 → 여러 개를 묶어서 관리
4) 세그먼트 (Segment)
- 테이블이나 인덱스 같은 객체가 사용하는 공간
- 여러 익스텐트로 구성됨
- 예시
- 테이블 세그먼트
- 인덱스 세그먼트
5) 테이블 (Table)
- 행(Row)의 집합
- 물리적으로는 세그먼트 단위로 디스크에 존재
3️⃣ RowID (물리 주소 개념)
1) RowID란?
- 행의 물리적 위치 정보
- DB 내부에서 특정 행을 빠르게 찾기 위한 주소
2) 구성 개념
- 파일 번호
- 블록 번호
- 행 번호
RowID = (파일 + 블록 + 행 위치)3) 왜 중요한가?
- 인덱스는 실제 데이터를 저장하지 않고 RowID를 저장해서 빠르게 접근
4️⃣ 데이터 저장 방식 (Heap 구조)
1) 기본 저장 방식
- 테이블은 기본적으로 순서 없이 저장 (Heap 구조)
- 특징
- INSERT 순서대로 쌓임
- 정렬 보장 없음
2) 문제점
- 특정 데이터를 찾을 때 전체 스캔 (Full Scan) 발생
5️⃣ 인덱스(Index)의 필요성
1) 인덱스 역할
- 데이터를 빠르게 찾기 위한 구조
- 일종의 정렬된 탐색용 자료구조
2) 동작 방식
- 인덱스에서 값 찾음
- RowID 확인
- 실제 데이터 블록 접근
3) 핵심 효과
- Full Scan → Index Scan으로 변경
- 디스크 I/O 횟수 감소
6️⃣ 디스크 I/O와 성능
1) HDD 기준 병목
- Seek Time (헤드 이동) ← 가장 느림
- Rotation Delay
- Transfer Time
2) 성능 핵심
- 랜덤 접근 많을수록 느림
- 블록 접근 횟수 줄이는 것이 핵심
7️⃣ 필기

8️⃣ 필기 내용에서 반드시 교정해야 할 포인트
1) “행 단위 I/O”라고 생각하면 틀림
- 반드시 블록 단위 I/O
2) “정렬 안 되어 있으면 인덱스 필요”
- 맞지만 불완전한 이해
👉 정확한 표현
- Heap 구조는 탐색이 느리기 때문에 인덱스가 필요
3) “인덱스 = 데이터 저장”
- ❌ 틀림
- ✅ 인덱스는 RowID(주소)를 저장
9️⃣ 한 줄 정리 (시험용 핵심)
- DB는 블록 단위로 디스크에 저장
- 테이블은 Heap 구조로 비정렬 저장
- 인덱스는 RowID를 이용해 탐색 성능을 개선
- 결국 성능은 디스크 I/O 횟수에 의해 결정됨
🔟 그림으로 이해하기

Share article