문제
다음 SQL에서 CBO가 인덱스를 사용하지 않고 FULL TABLE SCAN을 선택하는 이유로 가장 적절한 것은?
[테이블 정보]
- ORDERS 테이블: 1,000,000건
- ORDER_DATE 컬럼 인덱스 존재
- 최근 1년간 주문: 950,000건
- 1년 이전 주문: 50,000건
SQLSELECT * FROM ORDERS WHERE ORDER_DATE >= '2023-01-01'
① 인덱스가 없어서 ② 날짜 함수를 사용했기 때문에 ③ 조회되는 데이터 비율이 너무 높아서 ④ ORDER BY 절이 없어서
정답
3번
해설
③ 정답. 전체 100만건 중 95만건(95%)을 조회하는 조건이므로, CBO는 대부분의 데이터를 읽어야 하는 상황에서 FULL TABLE SCAN이 더 효율적이라고 판단합니다. 일반적으로 15-20% 이상의 데이터를 조회할 때 FULL TABLE SCAN이 선택됩니다. ① ORDER_DATE에 인덱스가 존재한다고 명시되어 있습니다. ② 함수를 사용하지 않은 단순 비교 조건입니다. ④ ORDER BY 절은 인덱스 사용 여부와 직접적 관련이 없습니다.