Search

[필수:성능]MIN/MAX 대상 컬럼 변형

BAD: 67.514ms, hit=737

MIN/MAX 대상을 변형
SELECT MAX(TO_CHAR(o.ord_dtm, 'YYYYMMDD')) AS last_order_ymd FROM startdbpg.tr_ord_big o WHERE o.shop_id = 'S001' ;
SQL
복사
실행계획 보기
•
매장 S001의 주문 약 19만 건을 모두 읽고, 한 건씩 TO_CHAR로 바꾼 뒤 최댓값을 고릅니다(rows=189216).

GOOD: 0.483ms, hit=5

MIN/MAX 처리 후 형식 변환
SELECT TO_CHAR(MAX(o.ord_dtm), 'YYYYMMDD') AS last_order_ymd FROM startdbpg.tr_ord_big o WHERE o.shop_id = 'S001' ;
SQL
복사
실행계획 보기
•
인덱스는 날짜 순으로 정렬되어 있어서, 맨 끝 1건만 읽고 끝냅니다(Index Only Scan Backward, rows=1).
•
형식 변환은 그 1건에만 적용합니다.
💡

KEY POINT

•
MIN/MAX는 원본 컬럼에 적용하고, 형식 변환은 결과에만 적용합니다.
•
원본 컬럼의 MIN/MAX는 정렬된 인덱스에서 첫 건이나 끝 건만 읽고 끝낼 수 있습니다.
•
실행계획에 Limit과 rows=1인 인덱스 스캔이 보이면 그 상태입니다.
📖 DEEP DIVE — SQL TUNER for PostgreSQL 기본원리편