본문 바로가기

MySQL

partition 에 대해서

[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