Search

선택 심화 04-03. 복합 인덱스의 선두 조건이 빠졌는지 확인하자

⚠️
선택 심화 · 현재 보류: 이 페이지의 실행계획은 원문에 제시된 예상·개념적 예시이며 이번 PostgreSQL 실측 결과가 아닙니다. SQL/인덱스 설정은 검증 후 적용해야 합니다.
상황: 회원 ID 조건 없이 하루 동안의 모든 주문 건수를 조회한다.

BAD SQL — 개선·검토 대상

-- 비교 대상: (mbr_id, ord_dtm)만 있는 경우 SELECT COUNT(*) AS cnt FROM tr_ord_big o WHERE o.ord_dtm >= TIMESTAMP '2023-03-01' AND o.ord_dtm < TIMESTAMP '2023-03-02';
SQL
복사

GOOD SQL — 권장 또는 비교할 SQL

-- 같은 SQL을 날짜 선두 인덱스 x01과 비교 -- x01: CREATE INDEX tr_ord_big_x01 ON tr_ord_big(ord_dtm); SELECT COUNT(*) AS cnt FROM tr_ord_big o WHERE o.ord_dtm >= TIMESTAMP '2023-03-01' AND o.ord_dtm < TIMESTAMP '2023-03-02';
SQL
복사

핵심

•
Index Cond가 나타났다고 효율적 구간 탐색이 보장되지는 않는다. 특히 선두 키를 사용하지 않는 SQL은 그 인덱스가 해당 검색 패턴에 적합한지 확인해야 한다.
💡
참고·예외
•
제공된 p.128은 힌트로 x04를 강제한 특수 실험이며, PostgreSQL 계획에 'INDEX FULL SCAN'이라는 별도 노드가 표시되는 것은 아니다. 보통 쿼리는 옵티마이저가 다른 인덱스·Seq Scan을 선택할 수 있다. PG 버전과 B-tree 최적화의 영향도 고려한다.