SQLD데이터 모델과 SQL성능 데이터 모델링난이도 2MCQ

SQLD 성능 데이터 모델링 기출문제 #15

문제

다음 테이블과 쿼리를 보고 성능 최적화를 위한 인덱스 설계로 가장 적절한 것은?

SQL
CREATE TABLE ORDERS ( ORDER_ID NUMBER, CUSTOMER_ID NUMBER, ORDER_DATE DATE, STATUS VARCHAR2(10), AMOUNT NUMBER );
SQL
SELECT ORDER_ID, AMOUNT FROM ORDERS WHERE CUSTOMER_ID = 100 AND ORDER_DATE BETWEEN '2023-01-01' AND '2023-12-31' AND STATUS = 'COMPLETE' ORDER BY ORDER_DATE DESC;

① CREATE INDEX IX1 ON ORDERS(CUSTOMER_ID, ORDER_DATE, STATUS) ② CREATE INDEX IX1 ON ORDERS(STATUS, CUSTOMER_ID, ORDER_DATE) ③ CREATE INDEX IX1 ON ORDERS(ORDER_DATE, CUSTOMER_ID, STATUS) ④ CREATE INDEX IX1 ON ORDERS(CUSTOMER_ID, STATUS, ORDER_DATE)

정답

4

해설

④가 정답입니다. 복합 인덱스에서는 등치조건(=)을 범위조건보다 앞에 배치해야 효율적입니다. CUSTOMER_ID(=), STATUS(=), ORDER_DATE(BETWEEN) 순으로 배치하면 가장 효율적인 인덱스 스캔이 가능합니다. ①은 STATUS가 마지막에 있어 비효율적입니다. ②는 STATUS가 첫 번째인데, CUSTOMER_ID보다 선택도가 낮을 가능성이 높아 비효율적입니다. ③은 범위조건인 ORDER_DATE가 첫 번째에 있어 이후 조건들의 인덱스 효과가 떨어집니다.

이런 문제 20~50개를 한 번에 풀어보세요

매번 새로 추가되는 모의고사 + 오답 자동 복습 + 회차별 실력 추적. 회원가입 후 무료 이용.

[SQLD] 성능 데이터 모델링 데이터 모델과 SQL 기출 #15 | sqldpass