문제
다음과 같은 상황에서 CBO가 FULL TABLE SCAN을 선택할 가능성이 가장 높은 경우는?
테이블: ORDERS (100만 건) 인덱스: idx_status ON orders(status) 통계정보: status='COMPLETE' (95만 건), status='PENDING' (5만 건)
① SELECT * FROM orders WHERE status = 'PENDING' ② SELECT count(*) FROM orders WHERE status = 'PENDING' ③ SELECT * FROM orders WHERE status = 'COMPLETE' ④ SELECT order_id FROM orders WHERE status = 'COMPLETE'
정답
3번
해설
③ status='COMPLETE'는 전체 데이터의 95%(95만/100만)를 차지하므로, CBO는 높은 선택도로 인해 인덱스보다 FULL TABLE SCAN이 더 효율적이라고 판단할 가능성이 높습니다. 일반적으로 전체 데이터의 15-20% 이상 조회 시 FULL TABLE SCAN을 선택합니다. ① status='PENDING'은 5%만 차지하므로 인덱스 스캔이 효율적입니다. ② COUNT(*)는 인덱스만으로 처리 가능하므로 인덱스를 사용합니다. ④ SELECT 절에 인덱스 컬럼만 있어 커버링 인덱스로 처리 가능하므로 인덱스를 사용합니다.