데이터 많이 다루시는데 파티션을 한 번 제대로 이해해두면 쿼리 성능·운영 편의성·백업 전략까지 전반적으로 업그레이드됩니다.
**파티션은 “하나의 테이블을 여러 조각으로 나눠 저장하는 기술”**입니다.
하지만 사용자(쿼리)는 여전히 한 테이블처럼 사용합니다.
예:
매일 200만 건씩 쌓이는 **거래 로그 테이블(transaction_log)**이 있다고 해보죠.
즉, 전체 테이블을 뒤지지 않아도 되는 구조입니다.
결론부터 말하면 둘 다 맞습니다.
대규모 서비스의 경우엔 처음부터 파티션을 고려해서 테이블을 설계합니다.
💡 이런 상황일 때:
미리 해두면:
실제로 실무에서는 이 케이스가 더 흔합니다.
예:
처음에는 하루 30만 건이라서 파티션 필요 없었는데
→ 2년 지나니 테이블이 몇 억 건으로 커짐 → 조회·백업·삭제가 느려짐
→ 그때 파티션 도입
이 경우 단점:
그럼에도 불구하고 성능 향상 효과가 매우 커서 충분히 시도하는 가치 있음.
대부분 기간 기반 조회를 많이 하죠?
예:
SELECT * FROM transaction_log
WHERE created_at BETWEEN '2024-12-01' AND '2024-12-31';
파티션이 있으면 DB는 해당 월 또는 해당 일의 파티션만 읽습니다.
이를 **Partition Pruning(가지치기)**라고 해요.
예: 1년 이상 지난 로그를 날려야 할 때
파티션 없으면:
DELETE FROM logs WHERE created_at < '2024-01-01';
-- 수백만 건 삭제 / 테이블 락 / Undo 증가 / 느림
파티션 있으면:
ALTER TABLE logs DROP PARTITION p2023;
-- 몇 초 내 끝남 / 락 거의 없음
인덱스도 파티션 단위로 생성 → 큰 테이블보다 훨씬 가볍게 작동합니다.
대형 시스템에서는 오래된 파티션을 저속 디스크로 옮기는 것도 가능(주로 Oracle, PostgreSQL).
가장 많이 사용됨.
예:
MySQL 예:
PARTITION BY RANGE (YEAR_MONTH) (
PARTITION p202412 VALUES LESS THAN (202501),
PARTITION p202501 VALUES LESS THAN (202502)
);
Row를 특정 컬럼 값으로 '골고루' 분산시킴.
예:
PARTITION BY HASH(user_id) PARTITIONS 8;
→ 특정 유저만 막 쿼리 때릴 때도 HotSpot이 덜 생김.
그런 경우 오히려 단순 IDX로 해결됨.
실제로는 운영하면서 커지면 적용하는 경우가 더 많다.

| 쿼리 수행할때 중복제거 distinct 넣고 안넣고 플랜에서 차이 (0) | 2025.12.17 |
|---|---|
| MySQL 기준 테이블 파티션 partition 생성 예제 코드설명 (0) | 2025.12.05 |
| 데이터 삭제 delete / truncate / partition drop 쓰는 방법 차이 (0) | 2025.12.05 |
| 데이터베이스 DELETE 트리거(Trigger)란? (0) | 2025.12.02 |
| 데이터 삭제할때 delete와 truncate 차이점은? (0) | 2025.12.02 |