더북(TheBook)

07 | 파티션 테이블

테이블을 생성할 때 파티션으로 테이블을 만들 수 있다. 파티션이라 함은 테이블에 있는 특정 컬럼 값을 기준으로 데이터를 분할해 저장해 놓는 것이다. 이때 논리적인 테이블은 1개지만, 물리적으로는 분할한 만큼 파티션이 만들어져 입력되는 컬럼 값에 따라 분할된 파티션별로 데이터가 저장된다. 파티션 테이블을 만드는 목적은 대용량 테이블의 경우 데이터 조회 시 효율성과 성능을 높이기 위한 것이다.

예를 들어, 샘플 스키마에 매출정보가 있는 sales 테이블은 총 91만여 건의 데이터가 담겨 있다. 이 테이블에서 특정 데이터를 찾으려면 91만 건을 모두 뒤져봐야 한다. 물론 인덱스를 사용하면 좀더 낫겠지만 그렇더라도 91만여 건을 읽는다는 것은 변함없다. 이때 테이블에 있는 판매일자(sales_date)와 판매월(sales_month) 컬럼을 이용해 조회할 때의 성능을 높여 보자. 판매월별로 데이터를 분할해 놓고 데이터 조회 시 특정 월을 조건으로 걸면 전체 데이터를 뒤져보지 않아도 된다.

만약 2000년 11월에 판매된 특정 상품 판매데이터를 검색한다고 하면,

파티션이 없는 경우: 91만여 건을 모두 뒤져 조건에 맞는 데이터를 걸러낸다.

파티션이 있는 경우: 2000년 11월 데이터(19,000여건)만 뒤져 조건에 맞는 데이터를 걸러낸다.

이처럼 대용량 테이블은 파티션을 만들어 놓는 것이 훨씬 유리하다. 파티션 테이블 생성도 CRATE TABLE문을 사용한다. sales 테이블 생성 구문을 살펴 보자.

    CREATE TABLE SALES(
      PROD_ID Number(6,0) NOT NULL,
      CUST_ID Number(6,0) NOT NULL,
      CHANNEL_ID Number(6,0) NOT NULL,
      EMPLOYEE_ID Number(6,0) NOT NULL,
      SALES_DATE Date DEFAULT SYSDATE NOT NULL,
      SALES_MONTH Varchar2(6 ),
      QUANTITY_SOLD Number(10,2),
      AMOUNT_SOLD Number(10,2),
      CREATE_DATE Date DEFAULT SYSDATE,
      UPDATE_DATE Date DEFAULT SYSDATE
    )
    PARTITION BY RANGE(SALES_MONTH)
    (
    ...
      PARTITION SALES_Q1_1998 VALUES LESS THAN ('199804') TABLESPACE MYTS,
      PARTITION SALES_Q2_1998 VALUES LESS THAN ('199807') TABLESPACE MYTS,
      PARTITION SALES_Q3_1998 VALUES LESS THAN ('199810') TABLESPACE MYTS,
      PARTITION SALES_Q4_1998 VALUES LESS THAN ('199901') TABLESPACE MYTS,
    ...
      PARTITION SALES_Q4_2003 VALUES LESS THAN ('200401') TABLESPACE MYTS
    );

판매월을 기준으로 RANGE 파티션을 사용했는데, 1998년 1분기는 SALES_Q1_1998, 2분기는 SALES_Q2_1998, 3분기는 SALES_Q3_1998, 4분기는 SALES_Q1_1998란 이름의 파티션을 만들었다. 이렇게 테이블을 생성한 뒤 INSERT를 하면 들어오는 데이터 값에 따라 자동으로 파티션별로 데이터가 적재된다. 이때는 한 파티션에 세 달치 데이터가 들어가게 될 것이다. 파티션 종류에는 RANGE 파티션 외에도, LIST 파티션, 해시 파티션, 그리고 여러 파티션을 조합한 복합 파티션이 있다.

파티션 테이블이든 일반 테이블이든 개발자 입장에서 DML문을 작성할 때 차이점은 전혀 없으나, 대용량 테이블은 파티션으로 분할해 놓으면 성능 향상에 큰 도움이 된다.

지금까지 오라클에서 제공하는 주요 데이터베이스 객체에 대해 알아 보았다. 여기서 소개한 내용 이외에도 데이터베이스 링크, 클러스터, 트리거, IOT, M-View, 함수, 프로시저, 패키지 등이 있다. 함수, 프로시저, 패키지에 대해서는 PL/SQL 학습 시 자세히 설명할 것이며, 나머지 객체들은 사용빈도가 그리 높지 않으므로 필요할 때만 간략히 다루겠다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.