본문 바로가기

프로그래밍/데이터베이스

[Real Mysql] 파티션

파티션이란

파티션이란 사용자는 하나의 테이블로 읽고 쓰지만 MySQL 서버 입장에서 데이터를 별도의 테이블로 분리해서 저장을 하는것 

파티션은 하나의 서버에서 테이블을 분산하는것이지, 원격 서버로 분산 시키는 건 아니다.

 

파티션 사용 이유

한 테이블이 너무 커서 인덱스 크기가 메모리보다 훨씬 크거나 데이터 특성상 삭제 작업이 필요한 경우 

 

단일 INSERT 와 SELECT 의 빠른 처리

 

insert 작업처럼 레코드의 변경이 발생하면 인덱스의 변경을 위한 작업이 발생하게 되고 

이때 index 크기가 너무 크다면 부하가 생길 수 있다.

파티션을 사용하면 index 에 크기도 작아지게 되서 성능 향상을 할 수 있다.

 

데이터의 물리적인 저장소 분리

파티션을 통해 파일의 크기를 조절하거나 각 파티션별 저장될 위치를 지정할 수 있다.

 

파티션 테이블의 쿼리

 

INSERT

 

파티션 키를 이용해서 레코드가 저장될 적절한 파티션을 결정

 

UPDATE

 

WHERE 조건에 파티션 키 컬럼 조건이 있다면 그 값으로 파티션에서 빠르게 대상 레코드 검색 가능

파티션 키 컬럼이 명시되지 않았다면 전체 파티션을 검색

 

SELECT

 

두가지 조건을 봐야한다

 

- WHERE 조건에 파티션이 있는지?

- WHERE 조건에 인덱스를 탈 수 있는지?

 

경우의 수로 보면

 

- 파티션 선택 가능 + 인덱스 탈 수 있음 : 가장 빠른 처리

- 파티션 불가 + 인덱스 가능 : 파티션 개수만큼 인덱스 레인지 스캔을 해서 결과를 가져온다.

- 파티션 가능 + 인덱스 불가:  각 파티션에 대해 풀 테이블 스캔

- 둘 다 불가: 모든 파티션 풀 테이블 스캔

 

파티션 테이블 주의 사항

MySQL에서는 테이블을 파일 단위로 관리해서 파티션이 많아지면 파일의 개수가 상당히 많아 질 수 있고

파티션의 개수가 늘어날 수록 성능이 떨어질 수 있다.