Oracle 실행 계획
같은 조건 조회라도 인덱스가 있으면 먼저 위치를 좁히고, 없으면 USERS 전체를 읽습니다.
같은 질의
SELECT * FROM users WHERE email = 'test@example.com'

인덱스 사용

예상 Rows 1
0
SELECT STATEMENT
최종 결과 1건을 반환합니다.
1
TABLE ACCESS BY INDEX ROWID
인덱스가 알려준 ROWID로 필요한 행만 테이블에서 읽습니다.
2
INDEX RANGE SCAN
IDX_USERS_EMAIL에서 조건에 맞는 키 범위만 먼저 찾습니다.
핵심은 먼저 좁히고 그 위치만 읽는다는 점입니다.

인덱스 미사용

예상 Rows 10000
0
SELECT STATEMENT
결과를 만들기 위해 많은 후보를 확인해야 합니다.
1
TABLE ACCESS FULL
USERS 전체 블록을 읽으며 조건에 맞는 행을 찾습니다.
인덱스가 없으면 조건과 관계없이 전체 테이블 스캔이 기본 경로가 됩니다.

주요 접근 방식은 “어디를 먼저 읽는가”로 구분하면 쉽습니다.

이름을 외우기보다, 인덱스로 좁히는지 인덱스 전체를 읽는지 테이블을 직접 읽는지부터 보면 해석이 빨라집니다.
정확히 찾기 / 범위 찾기
INDEX UNIQUE SCAN INDEX RANGE SCAN

PK·유니크 조건이면 1건을 바로 찾고, 범위 조건이면 여러 후보 키를 순서대로 찾습니다.

인덱스 전체 읽기
INDEX FULL SCAN INDEX FAST FULL SCAN INDEX SKIP SCAN

정렬 순서를 따라 읽거나, 더 빠르게 전체를 훑거나, 복합 인덱스의 선두 컬럼 없이 활용할 때 등장합니다.

테이블 읽기 방식
TABLE ACCESS BY INDEX ROWID TABLE ACCESS FULL

인덱스가 가리킨 위치만 읽을지, 테이블 전체를 읽을지의 차이가 실행 계획 비용과 읽는 양을 크게 바꿉니다.