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 |