[1. 개요]
mysql 에서 파티션이란
논리적으로 하나의 큰 table 을 여러개의 작은 table로 분할하여 관리하는 것을 말한다.
마치, elasticsearch 에서 각 index 를 날짜 별로 나누어서 관리하는 것과 비슷하다. (multitenancy)
파티션을 사용했을 때의 장점은 여러가지가 있으며,
보통 용량이 큰 table 을 좀 더 효율적으로 관리할 수 있게 한다.
row 가 매우 많은 table 에서는
select, delete, ... 등등 기본적인 쿼리 시간이 굉장히 오래 걸린다.
(특히, index 를 사용하더라도)
이 경우 파티션을 대상으로 쿼리를 진행하면, 좀 더 빠르게 쿼리를 처리 할 수 있다.
서버 용량 관리 측면에서도 매우 효과적이다.
파티션은 보통 table 을 생성 할 때 같이 만들며,
(중간에 추가해도 되지만, 데이터가 이미 있는 상태에서 파티션을 만들면 시간이 다소 오래 걸릴 수도.)
파티션들은 보통 일정한 기준을 갖고 분할이 된다.
예를 들어, 매일 하루 치 데이터가 쌓이는 DB 에 1년치 데이터가 쌓인 상태에서
서버 용량 관리를 위해 01/01 ~ 01/10 기간의 데이터를 지워야 할 때,
파티션이 없는 table 에서는 delete 쿼리를 이용하여 데이터를 지워야 하는데
그 시간이 매우 오래 걸릴 것이다.
(mysql 은 데이터를 원자적으로 관리 할 필요가 있으므로,
모든 데이터가 준비된 상태에서 한번에 commit 하는 특징이 있는데,
이 때 tmp 데이터를 준비해야 해서 용량이 더 필요 할 수 있다.)
반면 파티션을 사용하여 일(day) 단위로 파티션을 해놓은 경우
해당 파티션만 비우면 되기 때문에, 좀 더 빨리 용량을 확보할 수 있다.
[2. 사용 방법]
A. 파티션 종류
- Range
=> column 1개를 기준으로 파티셔닝 진행
=> LESS THAN 을 사용
=> INT 만 사용 가능 - List
=> column 1개를 기준으로 파티셔닝 진행
=> IN 조건을 사용 - Range Columns
=> 여러 column 을 기준으로 파티셔닝 진행
=> LESS THAN 을 사용
=> string, date, datetime 도 사용 가능 - List Columns
=> 여러 column 을 기준으로 파티셔닝 진행
=> IN 조건을 사용
=> string, date, datetime 도 사용 가능 - Hash
=> hash 함수를 이용해 파티셔닝 진행 - Key
B. 파티션 생성
C. 파티션 재구성
D. 파티션 비우기
E. 파티션 대상으로 쿼리
F. 파티션 삭제
[3. 예제]
'MySQL' 카테고리의 다른 글
MySQL, innodb_autoinc_lock_mode (0) | 2023.06.21 |
---|---|
MySQL, SQL_SAFE_UPDATES (0) | 2023.06.15 |
MySQL. LAST_INSERT_ID (0) | 2023.06.15 |
mysql 공간 쿼리 (0) | 2023.05.24 |
MariaDB 설치 및 계정 관리 (0) | 2022.04.01 |