선택도 계산
선택도 = 조건을 만족하는 행 수 / 전체 행 수
핵심은 비율 자체보다, 그 비율이 얼마나 많은 행을 실제로 읽게 만드는지입니다.
공유 전제 users 테이블 전체 1,000,000행

같은 테이블이라도 조건이 얼마나 많은 행을 남기느냐에 따라 비용이 달라집니다.

옵티마이저가 보는 것 조건이 남기는 행 범위

조금만 남기면 인덱스로 좁게 찾고, 많이 남기면 테이블을 한 번 훑는 편이 낫습니다.

선택도 낮음 드문 값을 찾는 조건
WHERE id = 1001
매칭되는 행 거의 한 행만 읽음
1 / 1,000,000 선택도가 매우 낮아서, 필요한 위치만 따라가는 접근이 가장 경제적입니다.
왜 유리한가

읽을 범위가 작으므로 인덱스가 가리키는 소수의 행만 방문하면 됩니다.

결론: Index Scan
선택도 높음 흔한 값을 찾는 조건
WHERE gender = 'M'
매칭되는 행 대량의 행을 읽게 됨
500,000 / 1,000,000 선택도가 높으면 결국 절반 가까운 행을 읽게 되어 인덱스 이점이 줄어듭니다.
왜 유리한가

많은 행을 따라가느니, 테이블을 한 번 순차적으로 읽는 편이 더 단순하고 저렴할 수 있습니다.

결론: Full Scan
요점: 선택도는 단순한 통계 수치가 아니라, 옵티마이저가 인덱스로 좁혀 읽을지 아니면 테이블 전체를 읽을지를 가르는 핵심 판단 근거입니다.