MySQL 파티셔닝 실전 가이드: 대용량 테이블 성능 100배 향상
수억 건의 데이터를 효율적으로 관리하는 MySQL 파티셔닝 튜토리얼. Range, List, Hash 파티셔닝을 실제 예제로 배웁니다.
럿지 AI 팀
3분 읽기
목차
MySQL 파티셔닝 완벽 가이드
파티셔닝이란?
큰 테이블을 작은 조각(파티션)으로 나누는 기술
**목적:** 쿼리 성능 향상, 관리 용이
문제 상황
``
sql
-- 주문 테이블: 5억 건
SELECT * FROM orders
WHERE order_date >= '2024-01-01';
-- 실행 시간: 30초!
`
Range 파티셔닝 (날짜별)
생성
`sql
CREATE TABLE orders (
order_id BIGINT,
member_id BIGINT,
order_date DATE,
total_amount DECIMAL(10,2),
PRIMARY KEY (order_id, order_date)
) PARTITION BY RANGE (YEAR(order_date) * 100 + MONTH(order_date)) (
PARTITION p202301 VALUES LESS THAN (202302),
PARTITION p202302 VALUES LESS THAN (202303),
PARTITION p202303 VALUES LESS THAN (202304),
...
PARTITION p202412 VALUES LESS THAN (202501),
PARTITION pmax VALUES LESS THAN MAXVALUE
);
`
효과
`sql
SELECT * FROM orders
WHERE order_date >= '2024-01-01' AND order_date < '2024-02-01';
-- 하나의 파티션만 스캔!
-- 실행 시간: 0.3초 (100배 향상!)
`
파티션 추가
`sql
ALTER TABLE orders
ADD PARTITION (PARTITION p202501 VALUES LESS THAN (202502));
`
파티션 삭제 (오래된 데이터)
`sql
ALTER TABLE orders DROP PARTITION p202301;
-- 매우 빠름! (DELETE보다 1000배 빠름)
`
List 파티셔닝 (지역별)
`sql
CREATE TABLE customers (
customer_id BIGINT,
name VARCHAR(50),
region VARCHAR(20),
PRIMARY KEY (customer_id, region)
) PARTITION BY LIST COLUMNS(region) (
PARTITION p_seoul VALUES IN ('서울', '경기', '인천'),
PARTITION p_busan VALUES IN ('부산', '울산', '경남'),
PARTITION p_others VALUES IN (DEFAULT)
);
`
Hash 파티셔닝 (균등 분산)
`sql
CREATE TABLE logs (
log_id BIGINT,
user_id BIGINT,
log_data TEXT,
PRIMARY KEY (log_id, user_id)
) PARTITION BY HASH(user_id)
PARTITIONS 10;
-- user_id를 10개 파티션에 균등 분산
`
파티션 조회
`sql
-- 파티션 정보 확인
SELECT
PARTITION_NAME,
TABLE_ROWS,
DATA_LENGTH
FROM INFORMATION_SCHEMA.PARTITIONS
WHERE TABLE_NAME = 'orders';
-- 특정 파티션 조회
SELECT * FROM orders PARTITION (p202401);
`
주의사항
1. PRIMARY KEY에 파티션 키 포함
`sql
-- ✗ 오류
PRIMARY KEY (order_id)
PARTITION BY RANGE (YEAR(order_date))
-- ✓ 정상
PRIMARY KEY (order_id, order_date)
PARTITION BY RANGE (YEAR(order_date))
`
2. 파티션 프루닝
`sql
-- ✓ 파티션 프루닝 발생 (빠름)
WHERE order_date = '2024-01-15'
-- ✗ 파티션 프루닝 불가 (느림)
WHERE YEAR(order_date) = 2024
`
실전 예제
주문 이력 관리
`sql
-- 월별 파티셔닝
-- 최근 3개월만 유지, 이전 데이터 삭제
-- 매월 1일 실행
-- 1. 새 파티션 추가
ALTER TABLE orders
ADD PARTITION (PARTITION p202502 VALUES LESS THAN (202503));
-- 2. 3개월 전 파티션 삭제
ALTER TABLE orders DROP PARTITION p202311;
``더 배우기
김영한의 실전 데이터베이스
- 파티셔닝 심화
- 인덱스 + 파티셔닝
- 대용량 최적화
---
**태그**: #MySQL파티셔닝 #대용량데이터 #성능최적화 #Range파티셔닝
L
럿지 AI 팀
AI 기술과 비즈니스 혁신을 선도하는 럿지 AI의 콘텐츠 팀입니다.
관련 포스트
비즈니스
블랙프라이데이 무장애 성공: DB 최적화로 거래량 1000% 폭증 대응
올바른 DB 설계와 파티셔닝으로 블랙프라이데이 거래 폭증을 무장애로 처리하고 매출 500억을 달성한 커머스 기업 사례입니다.
•4분 읽기
뉴스
2025 데이터베이스 시장 전망: MySQL이 여전히 1위, 클라우드 DB 급성장
2025년 데이터베이스 시장 분석. MySQL 점유율 1위 유지, AWS RDS·Azure DB 등 클라우드 DB 시장 연 25% 성장.
•4분 읽기
튜토리얼
B2B SEO 완벽 가이드: 의사결정권자를 검색으로 확보하는 법
B2B 기업을 위한 SEO 전략. 영업 없이 리드를 자동으로 확보하는 검색 최적화 완벽 가이드입니다.
•1분 읽기