선택 심화 · 현재 보류: 이 페이지의 실행계획은 원문에 제시된 예상·개념적 예시이며 이번 PostgreSQL 실측 결과가 아닙니다. SQL/인덱스 설정은 검증 후 적용해야 합니다.
상황: 2년 범위에서 픽업 완료·카드 결제 주문을 대량 조회한다.
BAD SQL — 개선·검토 대상
-- BAD는 SQL 자체가 아니라 '인덱스를 반드시 타야 한다'는 판단
SELECT o.*
FROM tr_ord_big o
WHERE o.ord_dtm >= TIMESTAMP '2023-01-01'
AND o.ord_dtm < TIMESTAMP '2025-01-01'
AND o.ord_st = 'PKUP'
AND o.pay_tp = 'CARD';
SQL
복사
GOOD SQL — 권장 또는 비교할 SQL
-- GOOD: 같은 SQL의 예상 비용과 반환 비율을 확인
EXPLAIN (COSTS OFF)
SELECT o.*
FROM tr_ord_big o
WHERE o.ord_dtm >= TIMESTAMP '2023-01-01'
AND o.ord_dtm < TIMESTAMP '2025-01-01'
AND o.ord_st = 'PKUP'
AND o.pay_tp = 'CARD';
SQL
복사
핵심
•
결과가 테이블의 큰 부분을 차지하면 인덱스에서 수많은 행 위치를 찾아 테이블을 여러 번 읽는 것보다 Seq Scan이 합리적일 수 있다.
참고·예외
•
원본 교재에는 테스트 인덱스 tr_ord_big_test(ord_st,pay_tp,ord_dtm)를 만든 뒤에도 성능을 비교하도록 되어 있다. 여기서는 원본의 측정 시간을 복사하지 않고, 인덱스 사용 여부 자체를 성공 기준으로 삼지 않는 규칙만 추출했다.



