문제
대용량 테이블(1000만 건)에서 다음 조건으로 조회할 때, CBO가 FULL TABLE SCAN을 선택하는 가장 적절한 이유는?
SQLSELECT * FROM big_table WHERE status IN ('A','B','C','D','E'); -- status 컬럼에 인덱스 존재 -- 전체 데이터의 80%가 해당 조건에 만족
① 인덱스가 B-Tree 구조가 아니어서 ② IN 조건은 인덱스 사용이 불가능해서 ③ 높은 선택도로 인한 비용 계산 결과 ④ 통계 정보가 없어서
정답
3번
해설
③ 전체 데이터의 80%를 조회하는 높은 선택도에서는 인덱스를 통한 Random I/O보다 FULL TABLE SCAN의 Sequential I/O가 비용상 효율적. ① B-Tree 인덱스여도 선택도가 높으면 FULL SCAN 선택. ② IN 조건도 인덱스 사용 가능. ④ 통계 정보 기반으로 비용 계산한 결과.