주문 테이블(orders, 800만건 좀 넘어요)에서 특정 날짜 주문만 뽑는 목록 쿼리가 어느 순간부터 확 느려져서 봤더니 인덱스를 안 타고 있더라고요. created_at 컬럼에 btree 인덱스 걸어둔 지는 한참 됐는데도요.
쿼리는 대충 이런 식입니다.
SELECT * FROM orders
WHERE created_at::date = '2026-07-01'
ORDER BY id DESC
LIMIT 50;EXPLAIN 찍어보면 이렇게 나와요.
Seq Scan on orders (cost=0.00..241832.10 rows=39000 width=220)
Filter: ((created_at)::date = '2026-07-01'::date)
Rows Removed by Filter: 7960000인덱스는 분명히 idx_orders_created_at 로 있고, 혹시나 해서 ANALYZE도 다시 돌렸는데 그대로예요. created_at으로 범위 조건(>=, <)을 주면 인덱스를 잘 타는데 저렇게 날짜로 비교만 하면 계속 seq scan이라... 제가 뭘 놓친 걸까요?
댓글 0