읽을 데이터 비율과 I/O 방식에 따라 Index Scan과 Table Full Scan의 손익분기점을 판단합니다.
핵심 요약
Oracle이 Table Row를 가져오는 방식을 Access Path라고 합니다. 이 이론의 핵심 비교 대상은 다음 두 경로입니다.
Index 경로
B-tree Root·Branch 탐색
→ Leaf Entry Scan
→ ROWID 후보 생성
→ 필요한 Table Block 방문
→ Table Filter·결과 반환
Table Full Scan 경로
High Water Mark 아래의 포맷된 Table Block Scan
→ 각 Row에 Predicate 적용
→ 결과 반환
Oracle Optimizer는 “전체 Row의 몇 %를 조회하는가”라는 한 가지 비율로 경로를 결정하지 않습니다.
Index 경로 비용
≈ Index 수직 탐색
+ 읽은 Leaf Block·Entry
+ 반환한 ROWID 후보
+ 방문한 Table Block
+ 반복 Starts
+ Sort·Table Access
+ DML·공간 비용
Full Scan 비용
≈ High Water Mark 아래 Scan 대상 Block
+ Multiblock·Direct Path·병렬 처리 특성
+ Predicate CPU
+ Sort·Join·Aggregate 후속 비용
따라서 “5% 이하면 Index, 10% 이상이면 Full Scan” 같은 수치는 절대 규칙이 아닙니다.
진단 기준
→ 최종 Row 수가 아니라 실제 Block 작업량
→ Index·Table Operation별 A-Rows·Buffers·Reads
→ 사용자 목표인 Elapsed·CPU·P95·처리량
이 이론의 범위
이 이론은 SQLP의
SQL 고급활용 및 튜닝 → 인덱스 튜닝 → 인덱스 스캔 방식범위에서 Index 경로와 Table Full Scan의 비용·손익분기점을 다룹니다. Index Full·Fast Full· Skip Scan의 상세 원리는 후속 이론에서 더 깊게 다룹니다.
학습 목표
이 이론을 학습한 뒤에는 다음을 설명할 수 있어야 합니다.
- Access Path와 Index·
Full Scan 경로를 구분한다. - Index 비용을 Leaf Scan·
ROWID 후보·Table Block 방문으로 분해한다. - Full Scan이 High Water Mark 아래의 포맷된 Block을 읽는 원리를 설명한다.
- Small Table·
Multiblock I/O· Direct Path·병렬 처리가 Full Scan 비용을 바꾸는 이유를 설명한다. - Selectivity·
Cardinality와 방문 Table Block 수를 구분한다. - Clustering Factor가 Index와 Full Scan 선택에 미치는 방향을 설명한다.
- Covering Index·
Index Fast Full Scan과 Table Full Scan을 비교한다. - Top-N·정렬·Partial Fetch가 손익분기점을 바꾸는 이유를 설명한다.
- Partition Pruning과 Full Partition Scan을 구분한다.
Starts·A-Rows·Buffers·Reads와LAST_*통계로 실제 비용을 측정한다.- 같은 Bind·
Fetch· Cache·동시성에서 후보 경로를 공정하게 비교한다.
본문
Access Path란 무엇인가
SQL은 원하는 결과를 선언하고, Optimizer는 여러 후보 Access Path 중 예상 비용이 가장 낮은 경로를 선택합니다.
SELECT order_id,
customer_id,
order_status,
order_amount
FROM orders
WHERE order_status = :status;
ORDERS(order_status) Index가 있다면 대표 후보는 다음과 같습니다.
후보 A
INDEX RANGE SCAN ORDERS_STATUS_IX
→ TABLE ACCESS BY INDEX ROWID
후보 B
TABLE ACCESS FULL ORDERS
Index가 존재해도 다음과 같은 이유로 Full Scan이 선택될 수 있습니다.
- Predicate가 많은 Row·
Block을 요구함 - Table이 매우 작음
- Index Column에 함수·묵시적 변환이 적용됨
- Leading Column을 사용하지 못함
- 통계가 오래되거나 실제 분포를 반영하지 못함
- Table의 Parallel 속성과 Multiblock 비용이 유리함
- Covering이 아니어서 많은 ROWID Table Access가 필요함
Index 경로의 비용을 세 단계로 분리한다
Heap Table의 일반적인 B-tree Index 경로입니다.
1. Root·Branch를 따라 Start Leaf 탐색
2. 조건 범위의 Leaf Entry Scan
3. Entry에서 ROWID 후보 생성
4. 필요한 Table Block 방문
5. Table Filter·Projection 후 결과 반환
예시 Plan입니다.
TABLE ACCESS BY INDEX ROWID BATCHED ORDERS
INDEX RANGE SCAN ORDERS_STATUS_IX
Index Leaf Scan
확인할 질문입니다.
- 어느 조건이
accessPredicate인가 - Start·
Stop 범위가 얼마나 넓은가 - 후행 조건이 Index Filter로 남는가
- Index Buffers·
Reads는 얼마인가 Starts가 몇 번 반복됐는가
최종 10행
Index A-Rows 10
Index Buffers 20,000
→ 넓은 Leaf Scan 후 Index Filter 가능성
Index Operation의 A-Rows는 상위 Operation으로 반환한 Entry·
ROWID 후보
Index A-Rows 100,000
Table A-Rows 1,000
→ Table로 100,000 ROWID 후보 전달
→ Table Filter에서 대부분 제거
후보 ROWID 자체를 줄이려면 다음을 검토합니다.
- Equality Column을 첫 Range 앞에 배치
- Table Filter Column을 Index에서 평가
- 더 적절한 복합 Index
- 결과 비율이 크면 Full·
Partition Scan
Table Block 방문
같은 10,000 ROWID도 비용이 다를 수 있습니다.
경우 A
10,000 ROWID
200 Table Block
경우 B
10,000 ROWID
8,000 Table Block
ROWID가 같은 Block에 모여 있으면 한 Block 방문으로 여러 Row를 처리할 수 있습니다. 넓게 흩어져 있으면 Random Access와 반복 Block 방문이 증가합니다.
TABLE ACCESS BY INDEX ROWID BATCHED
TABLE ACCESS BY INDEX ROWID BATCHED
Oracle은 Index에서 ROWID를 몇 개 모은 뒤 Table Block 순서에 가깝게 접근해 같은 Block의 반복 방문을 줄이려고 시도할 수 있습니다.
ROWID Batch 수집
→ Table Block 위치 고려
→ Table Row 접근
BATCHED가 의미하지 않는 것은 다음과 같습니다.
BATCHED
≠ Table Access 제거
≠ 후보 ROWID 자동 감소
≠ 항상 한 번의 Multiblock Physical Read
≠ Clustering 문제 완전 해결
100,000개의 후보 ROWID를 BATCHED로 처리해도 최종 결과가 1,000행이라면 후보 수 자체를 줄이는 설계가 더 중요할 수 있습니다.
Table Full Scan의 실제 동작
Oracle Full Table Scan은 High Water Mark 아래의 포맷된 Block을 읽으며, 그 Block의 Row에 Predicate를 적용합니다.
Segment Header↓High Water Mark 아래 Scan 대상 Block↓각 Row Predicate 평가High Water Mark는 해당 Segment에서 Block이 포맷돼 사용된 범위의 상한입니다.
DELETE와 High Water Mark
대량 Row를 DELETE해 현재 Row 수가 줄어도 High Water Mark는 자동으로 낮아지지 않을 수 있습니다.
과거 100,000 Block 사용
대량 DELETE 후 실제 Row는 10,000 Block 분량
High Water Mark 유지
→ Full Scan이 넓은 포맷 Block 범위를 읽을 수 있음
High Water Mark를 낮추려면 Table 특성과 운영 조건에 따라 다음을 검토합니다.
TRUNCATEALTER TABLE ... SHRINK SPACEALTER TABLE ... MOVE- Partition 단위 재구성
단순 Row 수와 Full Scan Block 수를 동일하게 보지 않습니다.
작은 Table
Table이 매우 작으면 다음 경로가 더 저렴할 수 있습니다.
Index Root·Branch·Leaf
+ ROWID Table Access
vs
작은 Table Block 전체 Scan
Oracle 공식 설명에서는 High Water Mark 아래 Block 수가 Multiblock Read 단위보다 작으면, 반환 비율이 낮아도 Full Scan이 저렴할 수 있다고 설명합니다.
Multiblock I/O· Direct Path·병렬
Multiblock Read
Full Table Scan은 한 I/O 요청에서 여러 Database Block을 읽을 수 있습니다.
작은 I/O 다수
vs
큰 Multiblock I/O 소수
DB_FILE_MULTIBLOCK_READ_COUNT는 순차 Scan에서 한 I/O로 읽는 최대 Block 수와 Optimizer 비용 계산에 영향을 줄 수 있습니다.
그러나 다음을 고정 규칙으로 사용하지 않습니다.
- 실제 I/O 크기는 Platform·
Storage· Session· Workload의 영향을 받음 - Cache·
Direct Path·비동기 I/O가 결합될 수 있음 - Logical I/O와 CPU 비용은 Physical I/O가 없어도 남음
Direct Path Read
일부 대용량·병렬 Scan은 Buffer Cache를 거치지 않고 Disk에서 Process의 PGA로 직접 읽을 수 있습니다.
Direct Path
Disk → PGA
Buffer Cache 우회
Direct Path는 Full Scan의 가능한 실행 방식 중 하나이며 모든 Full Scan이 반드시 Direct Path라는 뜻은 아닙니다.
Parallel Full Scan
큰 Table·
Serial Full Scan
한 Process가 전체 Scan
Parallel Full Scan
여러 PX Server가 Scan 범위 분담
Parallel은 Wall Clock을 줄일 수 있지만 전체 CPU·
손익분기점이 고정되지 않는 이유
행 비율보다 Block 비용
동일 결과 10,000행
Plan A
Table Block 150개 방문
Plan B
Table Block 9,000개 방문
Optimizer와 실제 성능은 Row 수보다 Block 방문과 I/O 방식을 중요하게 봅니다.
Table· Index 크기
Table 100,000 Block
Covering Index 8,000 Block
결과 비율이 높아도 Table보다 작은 Covering Index를 전체 Scan하는 INDEX FAST FULL SCAN이 유리할 수 있습니다.
반대로 Table이 20 Block뿐이면 선택적인 Predicate여도 Full Scan이 저렴할 수 있습니다.
Clustering Factor
Clustering Factor는 B-tree Index 순서와 Table Block 배치의 유사도를 나타내는 통계입니다.
낮은 Clustering Factor 방향
→ 인접 Index Entry가 같은·인접 Table Block을 가리킴
→ 큰 Range에서 Table Block 방문이 상대적으로 적음
높은 Clustering Factor 방향
→ ROWID가 넓게 분산
→ Index Range Scan의 Table I/O 증가 가능
Clustering Factor는 Optimizer가 Index Scan과 Full Scan 비용을 비교할 때 사용하는 중요 통계입니다.
Covering 여부
CREATE INDEX orders_status_cover_ix
ON orders(order_status, order_amount, order_id);
SELECT order_id,
order_amount
FROM orders
WHERE order_status = :status;
필요한 Column이 모두 Index에 있으면 Table ROWID Access를 생략할 수 있습니다.
INDEX RANGE SCAN 또는 INDEX FAST FULL SCAN
→ Table Access 없음
다만 넓어진 Index의 Leaf Block·
Index Full Scan· Fast Full Scan과 Table Full Scan
Index Full Scan
INDEX FULL SCAN
→ Start·Stop Key 없이 Index 전체를 Key 순서로 읽음
→ 정렬 순서 활용 가능
→ Multiblock보다 Ordered Scan 특성이 중요
Index Fast Full Scan
INDEX FAST FULL SCAN
→ Index 전체 Block을 Multiblock 방식으로 읽음
→ Key 정렬 순서 보장 없음
→ Index Column만 필요한 Query에서 Table 대안
Table Full Scan과 비교
| Access Path | 읽는 구조 | 정렬 보장 | Table Access |
|---|---|---|---|
| Index Range Scan | 조건 Leaf 범위 | Key 순서 | 필요 Column에 따라 발생 |
| Index Full Scan | Index 전체 | Key 순서 | 필요 Column에 따라 발생 |
| Index Fast Full Scan | Index 전체 | 보장 안 함 | Index-only 가능 |
| Table Full Scan | Table HWM 아래 | 보장 안 함 | Table 자체 읽음 |
Top-N·정렬·Partial Fetch
다음 SQL은 전체 비율보다 첫 20행을 얼마나 빨리 얻는지가 중요합니다.
SELECT order_id,
order_date
FROM orders
WHERE customer_id = :customer_id
ORDER BY order_date DESC, order_id DESC
FETCH FIRST 20 ROWS ONLY;
후보 Index입니다.
CREATE INDEX orders_customer_date_ix
ON orders(customer_id, order_date DESC, order_id DESC);
가능한 이점입니다.
customer_id Prefix 탐색
→ 최신 방향 Range Scan
→ 20행에서 조기 중단
→ Sort 절감
전체 Table에서 고객 Row 비율이 커도 첫 페이지 목표에서는 Index가 유리할 수 있습니다.
Partial Fetch 비교 주의
변경 전에는 전체 결과를 Fetch하고 변경 후에는 첫 20행만 Fetch하면 공정한 비교가 아닙니다.
첫 페이지 목표
→ 양쪽 모두 첫 N행까지 Fetch
전체 처리 목표
→ 양쪽 모두 End-of-Fetch 완료
EXECUTIONS, FETCHES, ROWS_PROCESSED, END_OF_FETCH_COUNT와 Application Row Limit을 확인합니다.
Partition Pruning과 Full Partition Scan
Partitioned Table에서는 전체 Table이 아니라 필요한 Partition만 Full Scan할 수 있습니다.
WHERE order_date >= DATE '2026-07-01'
AND order_date < DATE '2026-08-01'
월별 Partition이면 다음처럼 처리될 수 있습니다.
PARTITION RANGE SINGLE
TABLE ACCESS FULL
Full Table Scan
→ 모든 Partition 대상 가능
Full Partition Scan
→ Pruning된 Partition만 Scan
Index Range Scan과 비교할 때 전체 Table Block 수가 아니라 실제 Pruning 후 Scan Block을 기준으로 판단합니다.
통계정보와 비용 모델
Optimizer는 다음 정보를 이용해 Index와 Full Scan 비용을 예상합니다.
- Table Block 수·Row 수
- Index Leaf Blocks·
BLEVEL - NDV·
NULL· Histogram - Clustering Factor
- System Statistics
- Multiblock Read 관련 비용
- Parallel 속성
- Predicate Selectivity
통계가 오래되거나 Data Skew를 평균으로 추정하면 실제와 다른 경로가 선택될 수 있습니다.
예상 E-Rows 작음
실제 A-Rows 큼
→ Index 후보·Table Access 과소평가 가능
Table Block 통계 과대·과소
→ Full Scan 비용 왜곡 가능
실행계획과 실제 통계
Index 경로
TABLE ACCESS BY INDEX ROWID BATCHED ORDERS
INDEX RANGE SCAN ORDERS_STATUS_IX
확인합니다.
| Operation | 핵심 지표 |
|---|---|
| Index | Starts·E-Rows·A-Rows·Buffers·Reads·access/filter |
| Table | Starts·A-Rows·Buffers·Reads·Table Filter |
| 전체 | Elapsed·CPU·최종 Row·Fetch 범위 |
Full Scan 경로
TABLE ACCESS FULL ORDERS
확인합니다.
- Starts
- E-Rows·
A-Rows - Buffers·
Reads - Parallel 여부
- Partition Start·
Stop - 후속 Sort·
Join· Aggregate - Elapsed·
CPU
V$SQL_PLAN_STATISTICS_ALL의 다음 값과 연결할 수 있습니다.
LAST_STARTS
LAST_OUTPUT_ROWS
LAST_CR_BUFFER_GETS
LAST_CU_BUFFER_GETS
LAST_DISK_READS
실제 Cursor의 Operation별 통계는 다음처럼 확인합니다.
SELECT *
FROM TABLE(
DBMS_XPLAN.DISPLAY_CURSOR(
:sql_id,
:child_number,
'ALLSTATS LAST +PREDICATE +ALIAS +NOTE'
)
);
상위 Buffers 중복 합산 주의
실행계획의 상위 Operation Buffer 값은 하위 작업을 포함할 수 있습니다.
잘못된 계산
모든 Plan Line의 Buffers 단순 합산
권장
Operation별 작업 위치를 비교
+ Statement·주요 Branch 총량 확인
후보 경로의 공정한 비교
Hint는 운영 정답을 미리 고정하는 도구가 아니라 후보 경로의 실제 비용을 비교하는 실험 수단으로 사용할 수 있습니다.
SELECT /*+ GATHER_PLAN_STATISTICS INDEX(o orders_status_ix) */
order_id,
order_amount
FROM orders o
WHERE order_status = :status;
SELECT /*+ GATHER_PLAN_STATISTICS FULL(o) */
order_id,
order_amount
FROM orders o
WHERE order_status = :status;
비교 계약입니다.
- 동일 SQL 결과
- 동일 Bind 값과 Data Type
- 동일 Fetch 범위
- 동일 동시성
- 동일 Optimizer·
Parallel 환경 - 유사한 Cache 상태
- 여러 번 반복
- 대표·극단 Bind 포함
- DML·공간 회귀 포함
비교 지표입니다.
Query
Starts·A-Rows·Buffers·Reads
Elapsed·CPU·P95
Sort·TEMP
Physical I/O Request·Bytes
운영
Index Size
INSERT·UPDATE·DELETE TPS
Redo·Undo
다른 SQL Plan 변화
진단 사례
Table입니다.
ORDERS
Rows 10,000,000
HWM Blocks 500,000
Index입니다.
ORDERS_STATUS_IX
Leaf Blocks 20,000
Clustering Factor 9,500,000
ERROR Bind
결과 Row 5,000
Index Buffers 40
Table Buffers 4,800
Elapsed 0.08초
Index 경로가 적합할 수 있습니다.
COMPLETE Bind
결과 Row 8,000,000
Index Buffers 18,000
Table Buffers 450,000
Elapsed 42초
Full Scan 후보입니다.
Full Scan Buffers 500,000
Parallel DOP 8
Elapsed 12초
Index 경로의 Logical Block 총량은 약간 작아 보여도 Random Table Access와 낮은 Clustering 때문에 Wall Clock이 더 느릴 수 있습니다.
Covering 후보
(order_status, order_id, order_amount)
Leaf Blocks 90,000
INDEX FAST FULL SCAN
Buffers 90,000
Elapsed 7초
Query는 빨라질 수 있지만 다음을 확인합니다.
- DML Redo·
TPS - Index Segment·
Cache - 다른 상태 Bind
- 전체 Fetch·정렬 요구
- Full Scan과 병렬 Resource
자주 혼동하는 판단
| 혼동 | 정확한 기준 |
|---|---|
| 5% 이하면 Index, 10% 이상이면 Full Scan | Block 비용과 Access Path별 실제 통계를 비교한다 |
| Index가 존재하면 Index Scan이 선택된다 | Optimizer는 모든 사용 가능한 경로의 예상 비용을 비교한다 |
| Index Scan은 항상 Single Block I/O다 | Prefetch·Batching·Cache가 결합될 수 있다 |
| Full Scan은 항상 Direct Path다 | Buffer Cache 또는 Direct Path 등 실행 방식이 달라질 수 있다 |
| Full Scan은 현재 Row 수만큼만 읽는다 | High Water Mark 아래 포맷된 Block 범위를 기준으로 한다 |
| DELETE하면 Full Scan 범위가 즉시 줄어든다 | High Water Mark가 자동으로 낮아지지 않을 수 있다 |
| 결과 Row가 적으면 Index 작업량도 작다 | Leaf Scan·후보 ROWID·Table Block을 확인한다 |
| Covering이면 무조건 최적이다 | Index 전체 Scan·폭·DML·공간 비용을 포함한다 |
| Buffers가 작은 Plan이 항상 빠르다 | I/O 방식·CPU·병렬·Latency·Wall Clock을 함께 본다 |
| Hint로 빠른 Plan이 나오면 운영 Hint를 고정한다 | Hint는 후보 비교 후 안정성과 회귀를 검증해 사용한다 |
최종 체크리스트
[범위]
□ 최종 Row와 Fetch 범위를 확인했는가
□ Partition Pruning 후 실제 Scan 범위를 확인했는가
[Index]
□ Start·Stop과 Leaf Buffers를 확인했는가
□ 후보 ROWID와 Table Buffers를 분리했는가
□ Clustering·Covering·정렬·Starts를 확인했는가
[Full Scan]
□ High Water Mark와 Table Blocks를 확인했는가
□ Multiblock·Direct Path·Parallel 조건을 확인했는가
□ 후속 Sort·Join·Aggregate를 포함했는가
[검증]
□ 동일 Bind·Fetch·동시성인가
□ 여러 번 측정했는가
□ A-Rows·Buffers·Reads·Elapsed·CPU를 함께 봤는가
□ 대표·편중 Bind와 Peak Workload를 포함했는가
[운영]
□ 신규 Index의 DML·Redo·공간을 확인했는가
□ 다른 SQL 회귀와 Rollback을 준비했는가
복습 문제
답을 생각한 뒤 정답과 근거를 펼쳐 보세요.
Access Path란 무엇이며 Index 경로와 Table Full Scan 경로를 비교하시오.
정답과 근거
Access Path
- Table이나 Row Source에서 필요한 Row를 가져오는 방법입니다.
- Index 경로는 Root·
Branch· Leaf를 탐색하고 ROWID로 Table을 읽습니다. - Full Scan은 High Water Mark 아래의 포맷된 Table Block을 넓게 읽고 Predicate를 평가합니다.
Index 경로의 비용을 Leaf Scan·
정답과 근거
Index 비용 분해
- Leaf Scan: 읽은 Index Block·
Entry와 Predicate 평가. - ROWID 후보: Index가 Table로 전달한 후보 Row 수.
- Table Access: 후보가 분산된 Table Block·반복 방문과 Table Filter.
- Starts가 크면 1회 비용이 작아도 총비용이 커집니다.
Full Table Scan이 High Water Mark와 어떤 관계를 갖는지 설명하시오.
정답과 근거
High Water Mark
- Full Scan은 Segment의 High Water Mark 아래에서 포맷된 Block을 Scan합니다.
- 대량 DELETE 후 현재 Row가 적어도 HWM이 유지되면 넓은 Block 범위를 읽을 수 있습니다.
- Truncate·
Shrink· Move 등 재구성이 HWM 조정 후보입니다.
작은 Table에서 선택적 조건이어도 Full Scan이 유리할 수 있는 이유를 설명하시오.
정답과 근거
작은 Table
- Index Root·
Leaf와 Table을 따로 읽는 비용보다 작은 Table 전체 Block을 Multiblock으로 한 번 읽는 비용이 낮을 수 있습니다. - Oracle은 HWM 아래 Block 수와 Multiblock Read 비용을 비교합니다.
Multiblock I/O·
정답과 근거
I/O·병렬
- Multiblock은 한 요청에 여러 Block을 읽어 I/O Request 수를 줄일 수 있습니다.
- Direct Path는 일부 대량·병렬 Scan에서 Buffer Cache를 우회해 PGA로 읽습니다.
- Parallel은 Scan 범위를 여러 Server가 분담해 Wall Clock을 줄일 수 있지만 전체 Resource 사용은 증가할 수 있습니다.
Clustering Factor와 Covering Index가 Index·
정답과 근거
Clustering·
- 낮은 Clustering 방향에서는 Index 순서와 Table Block 배치가 비슷해 Table 방문이 줄 수 있습니다.
- Covering은 Table Access를 제거해 Index 경로의 손익분기점을 넓힙니다.
- 넓은 Index의 Leaf·
DML·공간 비용은 별도로 비교합니다.
Index Full Scan·
정답과 근거
세 Full 계열
- Index Full Scan은 Index 전체를 Key 순서로 읽습니다.
- Index Fast Full Scan은 Index 전체를 Multiblock 방식으로 읽고 정렬을 보장하지 않습니다.
- Table Full Scan은 Table HWM 아래 Block을 읽습니다.
- 필요한 컬럼·정렬·객체 크기와 Table Access 여부로 비교합니다.
Top-N·정렬·Partial Fetch가 고정된 조회 비율 기준을 무효화하는 이유를 설명하시오.
정답과 근거
Top-N·
- Top-N은 전체 결과 비율보다 정렬된 앞 N건을 얼마나 빨리 찾는지가 중요합니다.
- Index가 Sort를 제거하고 N건에서 멈추면 넓은 Full Scan보다 유리할 수 있습니다.
- 비교 양쪽의 Fetch 범위를 동일하게 맞춰야 합니다.
Partition Pruning 후 Full Partition Scan과 전체 Full Scan을 구분하시오.
정답과 근거
Partition Pruning
- 전체 Full Scan은 모든 대상 Partition을 읽을 수 있습니다.
- Pruning이 작동하면 필요한 Partition만 Full Scan합니다.
- Index와 비교할 때 전체 Table Blocks가 아니라 Pruning 후 Scan Block을 기준으로 합니다.
동일 조건에서 Index와 Full Scan 후보를 검증하는 절차와 지표를 설명하시오.
정답과 근거
검증 절차
- 동일 SQL 결과·Bind Type·