본문 바로가기
Q&A해결2026년 2월 20일1분 읽기

PostgreSQL vs MySQL 신규 프로젝트에 뭘 선택할까요

D
DB선택고민
조회 936댓글 5

PostgreSQL vs MySQL 신규 프로젝트에 뭘 선택할까요 관련 질문입니다.

아래 쿼리가 데이터가 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이 발생하고 있습니다. 인덱스를 어떻게 잡아야 할까요?

댓글 5

김김영삼8개월 전

이 쿼리의 병목은 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 이내로 줄어들 겁니다.

데데이터사이언스현8개월 전
저도 PostgreSQL 추천드려요. 저희 회사도 MySQL에서 PostgreSQL로 전환했는데, JSONB랑 CTE 때문에 쿼리가 훨씬 간결해졌습니다. Prisma 쓰시면 ORM 레벨에서는 차이가 거의 없어서 전환도 수월하고요.
개개발자준호8개월 전
한 가지 참고로, MySQL이 유리한 경우도 있어요. 단순 CRUD 위주에 읽기 트래픽이 압도적으로 많으면 MySQL의 InnoDB Buffer Pool이 효율적입니다. 근데 질문자분 요구사항이면 PostgreSQL이 맞을 것 같습니다.
DDB선택고민(guest)8개월 전
상세한 답변 감사합니다! RLS 기능은 몰랐는데 멀티테넌트에 딱이네요. PostgreSQL로 가겠습니다.
김김영삼8개월 전
좋은 선택이십니다. 추가로 Supabase도 한번 살펴보세요. PostgreSQL 기반이라 RLS, Auth, Realtime까지 한 번에 쓸 수 있어서 SaaS 초기 개발 속도를 많이 높여줍니다.
Ctrl+Enter로 등록