SQLP
시험 직전 요약장
판단 기준과 헷갈리는 개념, 대표 예제를 짧게 확인하세요.
복합 인덱스의 조건 처리: Access Predicate·Index Filter·Table Filter
원래 이론 →판단 기준
표를 좌우로 밀어 나머지 열을 확인하세요. 키보드: ←·→, Home·End
| 혼동 | 정확한 기준 |
|---|---|
| Oracle에는 Index Filter라는 별도 공식 Predicate Column이 있다 | 공식 Column은 ACCESS_PREDICATES·FILTER_PREDICATES이며 Index Operation Filter를 교육상 Index Filter라고 부른다 |
| Index에 있는 조건은 모두 Leaf Scan 범위를 줄인다 | 첫 범위 뒤 조건은 Table 후보만 줄이고 넓은 Leaf Scan은 남을 수 있다 |
| access에 표시된 조건은 모든 중간 Prefix를 제거한다 | 사전식 전체 범위 안의 중간 Prefix Entry를 읽을 수 있다 |
| A-Rows는 Index가 검사한 Entry 전체다 | 상위로 반환한 Row 수이며 내부 탈락 Entry는 Buffers와 함께 본다 |
| Index Filter와 Table Filter 비용은 같다 | Index Filter는 불필요한 Table ROWID Access를 줄일 수 있다 |
| BATCHED이면 후보 ROWID 문제는 해결됐다 | 접근 순서를 개선할 뿐 후보 수 자체를 줄이지 않는다 |
| 1회당 Buffer가 작으면 문제없다 | Starts가 크면 총비용이 커진다 |
| Filter Column을 모두 Index에 넣으면 최적이다 | 폭·DML·공간·다른 SQL Regression을 함께 본다 |
| 선두 Column이 없으면 Index 사용은 절대 불가능하다 | 낮은 NDV 선두 Column에서는 Skip Scan을 고려할 수 있다 |
| Index가 있으면 Full Scan 대안은 볼 필요가 없다 | 결과 비율과 Table I/O가 크면 Full·Partition Scan이 유리할 수 있다 |
헷갈리는 개념
표를 좌우로 밀어 나머지 열을 확인하세요. 키보드: ←·→, Home·End
| 처리 위치 | 줄일 수 있는 비용 | 이미 발생하거나 남는 비용 |
|---|---|---|
| Index Access | Leaf Scan 범위·ROWID 후보·Table Access 감소 가능 | 필요한 Tree 탐색과 좁은 Leaf Scan |
| Index Filter | Table로 전달할 ROWID 감소 | Filter 전까지 읽는 Leaf Block·Entry |
| Table Filter | 최종 결과 감소 | Leaf Scan·ROWID 생성·Table Access |
예를 들어 날짜 범위에서 100,000개의 Entry를 읽고 상태 조건에 맞는 Row가 1,000개라고 가정합니다.
대표 계산·예제
Oracle의 V$SQL_PLAN, PLAN_TABLE, 관련 Plan View는 다음 정보를 제공합니다.
표를 좌우로 밀어 나머지 열을 확인하세요. 키보드: ←·→, Home·End
| 공식 Column | 의미 |
|---|---|
ACCESS_PREDICATES | Access Structure에서 Row를 찾는 데 사용한 Predicate |
FILTER_PREDICATES | Operation이 Row를 상위로 반환하기 전에 평가한 Predicate |
예를 들어 다음 Plan을 봅니다.
예시·텍스트좌우로 이동해 전체 내용을 확인하세요. 키보드: ←·→, Home·End
TABLE ACCESS BY INDEX ROWID BATCHED ORDERS
filter("STATUS"='PAID')
INDEX RANGE SCAN ORDERS_X2
access("CUSTOMER_ID"=:B1
AND "ORDER_DATE">=:B2
AND "ORDER_DATE"<:B3)
도식좌우로 이동해 전체 내용을 확인하세요. 키보드: ←·→, Home·End
Index Access Predicate
→ CUSTOMER_ID·ORDER_DATE로 Index 탐색 범위 설정
Table Filter Predicate
→ Table Row를 읽은 뒤 STATUS 검사
Index Operation에 Filter가 표시되면 이를 Index Filter라고 설명할 수 있습니다.
예시·텍스트좌우로 이동해 전체 내용을 확인하세요. 키보드: ←·→, Home·End
INDEX RANGE SCAN ORDERS_X1
access("CUSTOMER_ID"=:B1
AND "ORDER_DATE">=:B2)
filter("STATUS"='PAID')
이 경우 status는 Leaf Entry에서 평가되므로 조건에 맞지 않는 ROWID가 Table Operation으로 전달되는 것을 줄일 수 있습니다.
내 최근 연습 오답
현재 브라우저의 연습 채점 기록에서 공개된 단원과 연결된 오답을 확인합니다.
오답 기록을 확인하고 있습니다.