DBDBDEEP
[친절한 SQL] 1.3.4 시퀀셜/랜덤 액세스 본문
테이블 또는 인덱스 블록을 액세스 (읽는) 방식은 시퀀셜 액세스와 랜덤액세스 두가지 방식이 있다.
Sequential 액세스
- 논리적 또는 물리적으로 연결된 순서에 따라 차례대로 Block을 읽는 방식
- 세그먼트에 할당된 익스텐트 목록을 Segment Header에 Extent 정보를 Map으로 가지고 있고
익스텐트 맵은 각 익스텐트의 첫 번째 블록 주소 값을 갖는다.
- 해당 Extent의 첫 Block부터 연속해서 읽게되면 Sequential Access가 가능하게 되는 것이고, 이를 Full Table Scan 이라고 한다.

Random Access
- 어떤 파일내에 있는 특정한 레코드를 찾을 때 다른 레코드를 순차적으로 읽지 않고 원하는 레코드만을 직접 액세스 하기 때문에 데이터를 빨리 검색할 수 있음 (데이터의 절재적인 면적이 중요하고, index의 Clustering Factor (CF) 따라서 어떤 경우는 Full table Scan이 더 빠를 수도 있다.
- 레코드 하나를 읽이 위해 한 블록씩 접근하는 방식임

Index Range Scan은 여러 ROWID를 반환한다.
→ 인덱스에서 조건에 맞는 ROWID들을 찾고, 각 ROWID에 대해 데이터 블록을 개별적으로 접근한다.
→ 랜덤 I/O는 디스크든 메모리든 데이터 블록 위치가 분산되어있으면 매번 위치이동이 필요하고 블록하나를 읽고 다른 블록으로 "점프" 해야 한다.
📉 손익분기점(Break-Even Point)
| 건수 | 액세스 방식 | 성능 경향 |
| 적은 건수 (선택도 높음) | Index + ROWID | 빠름 (랜덤 I/O 적음) |
| 일정 건수 이상 | Index + ROWID vs Full Scan | 비용 역전 구간 |
| 많은 건수 (선택도 낮음) | Full Table Scan | 더 빠름 (시퀀셜 I/O 효율) |
* 인덱스 손익 분기점은 낮은 5~20% 에서 결정됨
▶ Table Full Scan은 시퀀셜 액세스인 반면, 인덱스 ROWID를 이용한 테이블 액세스는 랜덤 액세스 방식임
'친절한 SQL 튜닝' 카테고리의 다른 글
| 2.1.5 결합 인덱스 구조와 탐색 (0) | 2026.05.16 |
|---|---|
| 2.1.3 인덱스 수직/수평적 탐색 (0) | 2026.05.16 |
| 1.3.6 Single Block,Multi Block I/O (0) | 2026.05.16 |
| [친절한 SQL] 1.3.5 논리적 I/O vs 물리적 I/O (0) | 2026.05.11 |
| [친절한 SQL] 1.1.5 옵티마이저 힌트 (0) | 2026.05.11 |