Database에서 Partitionining 이용시에 장점..


1. Query performance 가 특정 상황에서는 아주 향상될 수 있다. 특히, 대부분의 많이 접근되는 행이  하나나 몇개의 파티셔션에 집중되어 있다면 그렇다. Paritioning 자체가 인덱스 사이즈를 줄이는 것이 가능하고, 때로는 많이 사용하는 부분을 메모리에 모두 올리는 것이 가능할 수 있기 때문이다.


2. 하나의 파티션에 큰 부분을 접근하는 쿼리나 업데이트에서, 성능 개선이 가능하다. 인덱스를 타거나 랜덤하게 전체의 테이블에 퍼져있는 데이터를 읽는 대신에 하나의 파티션에서 순차적인 스캔이 가능하기 때문이다.


3. 대량의 데이터를 올리거나 삭제하는 것이 파티션을 통째로 다룸으로서(파티션을 새로 생성 또는 통째로 삭제함으로써) 가능하다. 물론 요구사항이 파티션 디자인 시에 계획되었을 대다.


4. 잘 사용되지 않는 데이터는 더 저렴하고 상대적으로 느린 저장소에 따로 저장하는 것이 가능하다.


대부분은 테이블 크기가 클 때 장점이 극대화됨...


PostgreSQL의 Partitioning

inheritance를 통해서 지원됨, 하나의 비어있는 parent table에 각각의 Partition이 child가 되는 형태임

Range Partitioning : column이나 여러개의 column 에서 오버랩 없이 나누어짐. 날짜로 나누거나, 식별자의 range로 나누게 됨

List Partitioning : 키 값의 list를 작성하고, 이 키 값의 리스트에 따라 나누어짐


PostgreSQL에서 Partitioning 방법

tutorial 72page pdf 146쪽


Partitioning 이후에 Query Optimization

"consraint exclusion"을 이용


set constraint_exclusion=ON;

select count(*) from measurement where logdate>=DATE'2008-01-01';


이런식으로~ constraint_exclusion이라는게 ON되어 있을 때 planner가 필요없는 partition을 제외하려고 노력한다.

요걸 어떻게 하는지 보려면 쿼리 플랜을 보는 키워드인 explain을 써보면 된다,

set constraint_exclusion=off;

explain select count(*) from measurement where logdate>=DATE'2008-01-01';






'COMPUTER > DATABASE' 카테고리의 다른 글

PostgreSQL Tips  (0) 2015.10.26
PostgreSQL 컬럼수 제한  (0) 2015.10.26
postgreSQL 유용한 쿼리  (0) 2015.10.20
altibase db connection 예제  (0) 2014.09.17
sql 여러행 비교 - 서브쿼리가 여러개의 행을 리턴할 때  (0) 2013.10.10

+ Recent posts