문제
다음 테이블과 인덱스 상황에서 CBO가 인덱스 스캔 대신 FULL TABLE SCAN을 선택할 가능성이 가장 높은 경우는?
SQLCREATE TABLE customer_orders (id, customer_id, order_date, amount); -- 총 1,000,000건의 데이터 CREATE INDEX idx_customer ON customer_orders (customer_id); -- customer_id 값은 1~100 범위에 균등 분포
① SELECT * FROM customer_orders WHERE customer_id = 1; ② SELECT * FROM customer_orders WHERE customer_id IN (1, 2); ③ SELECT * FROM customer_orders WHERE customer_id BETWEEN 1 AND 10; ④ SELECT * FROM customer_orders WHERE customer_id BETWEEN 1 AND 80;
정답
4번
해설
CBO는 비용 기반으로 실행 계획을 결정합니다. 데이터가 균등 분포되어 있을 때, customer_id가 1~80 범위면 전체 데이터의 80%를 조회하게 됩니다. 일반적으로 전체 데이터의 15-20% 이상을 조회할 때는 인덱스 스캔보다 FULL TABLE SCAN이 더 효율적이므로 CBO가 테이블 스캔을 선택할 가능성이 높습니다. ①②③은 상대적으로 적은 비율의 데이터를 조회하므로 인덱스 스캔이 선택될 가능성이 높습니다.