일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- analytics4
- 명령어
- 티스토리챌린지
- SQL
- JPA
- MongoDB
- docker
- Python
- 리눅스
- group by
- MariaDB
- mssql
- DBMS
- 오블완
- Javascript
- rsync
- top
- Linux
- spring
- 트랜잭션
- oracle
- 자바
- API
- java
- PostgreSQL
- mysql
- git
- IntelliJ
- 차이점
- network
- Today
- Total
hanker
SQL - 테이블 파티셔닝(Table Partitioning) 본문
대규모 데이터를 효율적으로 관리하고 쿼리 성능을 최적화하기 위해 테이블 파티셔닝(Table Partitioning)이 사용된다.
파티셔닝은 하나의 큰 테이블을 여러 작은 부분으로 나누어 관리하는 기법이다.
이번 글에서는 테이블 파티셔닝의 개념, 종류, 그리고 실전에서 사용하는 방법을 알아보자!
1. 테이블 파티셔닝(Table Partitioning) 이란?
테이블 파티셔닝은 테이블의 데이터를 논리적으로 분리하여 여러 파티션에 저장하는 방식이다.
- 각 파티션은 독립적으로 관리되며, 물리적으로는 하나의 테이블처럼 동작한다.
- 대규모 데이터를 관리하기 쉽고, 특정 데이터에 대한 쿼리 성능이 크게 향상된다.
2. 테이블 파티셔닝의 장점
2-1. 성능 최적화
- 쿼리 실행 시 특정 파티션만 액세스하여 검색 속도를 높인다.
2-2. 데이터 관리 용이성
- 데이터 아카이빙 및 유지보수가 간편하다.
2-3. 병렬 처리 가능
- 각 파티션에 대해 병렬 처리를 수행하여 성능을 향상시킬 수 있다.
2-4. 데이터 로드 및 삭제 효율성
- 대량 데잍를 손쉽게 로드하거나 삭제할 수 있다.
3. 파티셔닝의 종류
3-1. 범위 파티셔닝 (Range Partitioning)
- 특정 열의 값 범위에 따라 데이터를 나눈다.
CREATE TABLE orders (
order_id INT,
order_date DATE,
amount DECIMAL(10, 2)
)
PARTITION BY RANGE (YEAR(order_date)) (
PARTITION p_2022 VALUES LESS THAN (2023),
PARTITION p_2023 VALUES LESS THAN (2024),
PARTITION p_future VALUES LESS THAN MAXVALUE
);
# 결과 : order_date 의 연도별로 데이터를 분리한다.
3-2. 해시 파티셔닝 (Hash Partitioning)
- 특정 열의 해시 값에 따라 데이터를 나눈다.
CREATE TABLE customers (
customer_id INT,
name VARCHAR(50)
)
PARTITION BY HASH(customer_id) PARTITIONS 4;
# 결과 : customer_id의 해시 값을 기준으로 4개의 파티션으로 데이터를 나눈다.
3-3. 리스트 파티셔닝 (List Partitioning)
- 특정 열의 값을 기준으로 데이터를 나눈다.
CREATE TABLE employees (
employee_id INT,
name VARCHAR(50),
department_id INT
)
PARTITION BY LIST (department_id) (
PARTITION p_sales VALUES IN (1, 2),
PARTITION p_hr VALUES IN (3, 4),
PARTITION p_others VALUES IN (5, 6, 7)
);
# department_id 값을 기준으로 데이터를 분리
3-4. 합성 파티셔닝 (Composite Partitioning)
- 여러 파티셔닝 방식을 조합하여 데이터를 나눈다.
CREATE TABLE transactions (
transaction_id INT,
customer_id INT,
transaction_date DATE
)
PARTITION BY RANGE (YEAR(transaction_date))
SUBPARTITION BY HASH(customer_id)
SUBPARTITIONS 4 (
PARTITION p_2022 VALUES LESS THAN (2023),
PARTITION p_2023 VALUES LESS THAN (2024)
);
# 결과 : 연도별로 데이터를 나누고, 각 연도 데이터를 해시로 추가 분리
4. 파티셔닝의 활용
4-1 대규모 로그 데이터 관리
- 로그 데이터를 날짜별로 파티셔닝하면 특정 기간의 로그만 빠르게 조회할 수 있다.
CREATE TABLE logs (
log_id INT,
log_date DATE,
log_message TEXT
)
PARTITION BY RANGE (TO_DAYS(log_date)) (
PARTITION p_old VALUES LESS THAN (TO_DAYS('2024-01-01')),
PARTITION p_recent VALUES LESS THAN MAXVALUE
);
4-2. 데이터 아카이빙
- 파티션을 사용하여 오래된 데이터를 손쉽게 아카이빙하거나 삭제할 수 있다.
ALTER TABLE orders DROP PARTITION p_2022;
* 데이터 아카이빙 : 데이터 장기보관을 위한 전략 중 하나로, 주로 접근 빈도가 낮은 데이터를 클라우드 스토리지에 저장하는 방법
4-3. 병렬 처리
- 대용량 데이터를 병렬로 처리하여 성능을 향상시킨다.
데이터 베이스는 각 파티션을 독립적으로 처리하므로, 쿼리 속도가 빨라진다.
5. 파티셔닝 사용 시 주의사항
5-1. 적절한 파티션 키 선택
- 데이터의 분포와 쿼리 패턴에 따라 적합한 파티션 키를 선택해야 한다.
5-2. 과도한 파티션 생성 금지
- 너무 많은 파티션은 관리가 힘들어지고, 성능 저하를 유발할 수 있다.
5-3. 인덱스와의 조합
- 파티션된 테이블에도 인덱스를 추가하여 성능을 더욱 최적화할 수 있다.
5-4. 데이터베이스 지원 여부
- 파티셔닝 기능은 데이터베이스에 따라 지원 범위가 다르다.
정리
SQL 테이블 파티셔닝은 대규모 데이터를 효율적으로 관리하고 쿼리 성능을 최적화하는 데 필수적이다.
적절한 파티셔닝 전략은 데이터베이스의 성능과 유지보수성을 크게 향상시킨다!
끝.
'DATABASE > SQL' 카테고리의 다른 글
SQL - 트리거(Trigger)란 무엇인가? (0) | 2025.01.12 |
---|---|
SQL - 각 데이터베이스 별 버전 확인 방법 ( MySQL / MSSQL / PostgreSQL / Oracle / MariaDB / MongoDB) (0) | 2025.01.11 |
SQL - 뷰(View)를 알아보자 (뷰 테이블, View Table) (0) | 2025.01.09 |
SQL - 트랜잭션(Transaction) 가이드 (커밋과 롤백 활용 방법) (0) | 2025.01.06 |
SQL - 인덱스(index) 사용법, 종류, 정의 (0) | 2025.01.05 |