본문 바로가기
Q&A2025년 1월 9일1분 읽기

MySQL 8 vs PostgreSQL 17 신규 프로젝트 선택

R
Rust입문자
조회 704댓글 4

MySQL 8 vs PostgreSQL 17 신규 프로젝트 선택 관련 질문입니다.

아래 쿼리가 데이터가 10만건 넘어가면서 3초 이상 걸립니다:

SELECT u.name, COUNT(o.id) as order_count
FROM users u
LEFT JOIN orders o ON u.id = o.user_id
WHERE o.created_at >= '2025-01-01'
GROUP BY u.id
ORDER BY order_count DESC
LIMIT 20;

EXPLAIN 결과 Seq Scan이 발생하고 있습니다. 인덱스를 어떻게 잡아야 할까요?

댓글 4

풀풀스택주니어(guest)1년 전
저도 비슷한 경험 있어요 개인적으로는 상황에 따라 다르다고 봅니다. 프로젝트 규모나 팀 환경에 따라 최적의 선택이 달라지니까요.
코코딩하는민수1년 전

참고로 저희 팀에서는 저는 실무에서 직접 써본 경험으로 말씀드리면, 처음에는 러닝커브가 있지만 익숙해지면 생산성이 확실히 올라갑니다.

김김영삼1년 전

이 쿼리의 병목은 orders 테이블의 full scan입니다. 복합 인덱스를 생성하세요:

-- 1. 핵심 인덱스 생성
CREATE INDEX idx_orders_user_date ON orders(user_id, created_at);

-- 2. 쿼리 개선 (서브쿼리로 분리)
SELECT u.name, sub.order_count
FROM users u
JOIN (
SELECT user_id, COUNT(*) as order_count
FROM orders
WHERE created_at >= '2025-01-01'
GROUP BY user_id
ORDER BY order_count DESC
LIMIT 20
) sub ON u.id = sub.user_id
ORDER BY sub.order_count DESC;

서브쿼리에서 먼저 집계하면 users 테이블 전체 조인을 피할 수 있습니다. 3초 → 10ms 이내로 줄어들 겁니다.

RRust입문자(guest)1년 전
다들 의견 감사합니다! 많은 참고가 됐어요 🙏
Ctrl+Enter로 등록