Database/MySQL

MySQL Partition Table

BUST 2018. 11. 5. 22:40

MySQL Partition Table

  • 테이블에 들어오는 데이터를 별도를 테이블로 저장하는 기능, 하나의 테이블로 읽기와 쓰기가 가능하다.
  • 파티션 방법
    • 해시
    • 리스트
    • 레인지


파티션을 사용하는 이유

  • 테이블의 너무 커서 인덱스의 크기가 물리적인 메모리가 훨씬 큰 경우
  • 데이터 특성상 주기적인 삭제 작업이 필요한 경우 (이력 데이터)
  • 단일 INSERT와 단일 또는 범위 SELECT의 빠른 처리
    • 인덱스가 커질수록 SELECT, INSERT, UPDATE, DELETE 작업이 느려지게 된다. 
    • 데이터가 10기가이고 인덱스가 3G 일때 대부분 데이터가 조회되는 것이 아니라 보통 데이터의 20~30%수준만 조회가 된다. 이럴때 자주 사용하는 데이터를 분리를 한다면 성능적으로 효과를 볼수가 있다.

Create Table Example

CREATE TABLE tb_article (
article_id INT NOT NULL,
reg_date DATETIME NOT NULL,
...
PRIMARY KEY(article_id)
)
PARTITION BY RANGE ( YEAR(reg_date) ) (
PARTITION p2009 VALUES LESS THAN (2010),
PARTITION p2010 VALUES LESS THAN (2011),
PARTITION p2011 VALUES LESS THAN MAXVALUE
);


Table Search Case

  • 파티션 선택 가능 + 인덱스 사용 가능
    • 하나의 파티션에서 인덱스를 사용한 검색
  • 파티션 선택 불가 + 인덱스 사용 가능
    • 각각의 파티션에 대해 인덱스 scan이후 병합
  • 파티션 선택 가능 + 인덱스 사용 불가
    • 해당하는 파티션에 full-sscan
  • 파티션 선택 불가 + 인덱스 사용 불가
    • 전체 파티션에 대한 full-scan


'Database > MySQL' 카테고리의 다른 글

Mysql case 구문 Example  (0) 2019.01.15
CHAR와 VARCHAR의 차이  (0) 2018.12.23
MySQL Unique Key  (0) 2018.10.29
Group By 최대값을 가진 Row를 추출하는 쿼리  (0) 2018.09.03
Mysql Query Plan  (0) 2018.07.24