선택도는 비율이 아니라 접근 비용 판단 기준
선택도 = 조건에 맞는 행 수 / 전체 행 수
같은 인덱스가 있어도 몇 행을 건드리느냐에 따라 옵티마이저의 선택이 바뀝니다. 적게 찾으면 인덱스가 빠르고, 많이 찾으면 테이블을 한 번에 읽는 편이 낫습니다.
실무에서 자주 보는 판단 구간
5~10% 이하 인덱스 사용이 대체로 유리
10~20% 옵티마이저가 통계와 비용을 비교
20% 이상 Full Scan 쪽이 더 빠를 수 있음
선택도 높음
인덱스 효과적
예시 조건
WHERE email = 'test@example.com'
매칭 행
100만 건 중 1건 반환, 선택도 0.0001%
읽는 방식
인덱스로 대상 키를 찾고 필요한 소수의 ROWID만 따라가므로 랜덤 I/O가 작게 끝납니다.
결론
테이블 전체를 훑는 것보다 인덱스 탐색 비용이 훨씬 작습니다.
선택도 낮음
Full Scan 가능성 큼
예시 조건
WHERE gender = 'M'
매칭 행
100만 건 중 50만 건 반환, 선택도 50%
읽는 방식
인덱스에서 많은 ROWID를 꺼내 다시 테이블로 점프하므로 랜덤 I/O가 크게 누적됩니다.
결론
연속 읽기인 Sequential I/O로 한 번에 훑는 Full Scan이 더 유리할 수 있습니다.
B-Tree 인덱스의 핵심 trade-off: 인덱스 경로는 인덱스 → ROWID → 테이블로 이어져 랜덤 I/O가 늘어나고, Full Scan은 테이블을 순서대로 읽는 Sequential I/O라서 읽는 행 수가 일정 비율을 넘으면 더 빨라집니다.