분할 프루닝(partition pruning)은 검색 조건을 통해 데이터 검색 범위를 한정시키는 기능이다. 질의에서 필요한 데이터를 포함하고 있지 않은 분할은 검색 과정에서 제외시킨다. 이를 통해 디스크로부터 인출되는 데이터의 양과 처리 시간을 크게 줄이고 질의 성능 및 자원 사용률을 개선할 수 있다.
다음은 참가한 올림픽의 개최연도에 따라 영역 분할하는 olympic2 테이블을 생성하고 2000년도 시드니 올림픽 이후의 올림픽에 참가한 국가를 조회하는 질의이다. WHERE 절에서 분할 키에 대하여 상수 값과 동등 비교 또는 범위를 비교하는 경우 분할 프루닝이 발생한다.
예제의 경우 2000보다 작은 연도 값을 가진 before_1996 분할은 접근하지 않는다.
CREATE TABLE olympic2
( opening_date DATE, host_nation VARCHAR(40))
PARTITION BY RANGE ( EXTRACT (YEAR FROM opening_date) )
( PARTITION before_1996 VALUES LESS THAN (1996),
PARTITION before_MAX VALUES LESS THAN MAXVALUE );
SELECT opening_date, host_nation FROM olympic2 WHERE EXTRACT ( YEAR FROM (opening_date)) >= 2000;
다음은 분할 프루닝이 되지 않는 경우에 사용자가 특정 분할을 지정하여 데이터를 조회함으로써 분할 프루닝의 효과를 얻는 방법을 보여주는 예제이다.
예제에서 첫 번째 질의는 비교 값이 분할 표현식과 같은 형식이 아니므로 분할 프루닝이 일어나지 않는다. 따라서 두 번째 질의와 같이 알맞은 분할을 지정하여 분할 프루닝이 발생하는 것과 같은 기능을 사용할 수 있다.
SELECT host_nation FROM olympic2 WHERE opening_date >= '2000 - 01 - 01';
SELECT host_nation FROM olympic2__p__before_max WHERE opening_date >= '2000 - 01 - 01';
다음은 해시 분할 테이블인 manager 테이블에서 분할 프루닝이 발생하도록 검색 조건을 지정한 예제이다.
해시 분할의 경우 WHERE 절에서 분할 키에 대하여 상수 값과 동등 비교를 하는 경우에만 분할 프루닝이 발생한다.
CREATE TABLE manager (
code INT,
name VARCHAR(50))
PARTITION BY HASH ( code) PARTITIONS 4;
SELECT * FROM manager WHERE code = 10053;