Teradata-분할 된 기본 인덱스

PPI (Partitioned Primary Index)는 특정 쿼리의 성능을 향상시키는 데 유용한 인덱싱 메커니즘입니다. 행이 테이블에 삽입되면 AMP에 저장되고 행 해시 순서에 따라 정렬됩니다. 테이블이 PPI로 정의되면 행이 파티션 번호별로 정렬됩니다. 각 파티션 내에서 행 해시로 정렬됩니다. 정의 된 파티션 표현식을 기반으로 행이 파티션에 할당됩니다.

장점

  • 특정 쿼리에 대한 전체 테이블 스캔을 피하십시오.

  • 추가 물리적 구조와 추가 I / O 유지 관리가 필요한 보조 인덱스는 사용하지 마십시오.

  • 큰 테이블의 하위 집합에 빠르게 액세스합니다.

  • 이전 데이터를 빠르게 삭제하고 새 데이터를 추가하십시오.

OrderNo에 대한 기본 인덱스가있는 다음 주문 테이블을 고려하십시오.

StoreNo 주문 번호 OrderDate OrderTotal
101 7501 2015-10-01 900
101 7502 2015-10-02 1,200
102 7503 2015-10-02 3,000
102 7504 2015-10-03 2,454
101 7505 2015-10-03 1201
103 7506 2015-10-04 2,454
101 7507 2015-10-05 1201
101 7508 2015-10-05 1201

다음 표에 표시된 것처럼 레코드가 AMP간에 배포된다고 가정합니다. 기록은 AMP에 저장되며 행 해시를 기준으로 정렬됩니다.

AMP 1

RowHash 주문 번호 OrderDate
1 7505 2015-10-03
2 7504 2015-10-03
7501 2015-10-01
4 7508 2015-10-05

AMP 2

RowHash 주문 번호 OrderDate
1 7507 2015-10-05
2 7502 2015-10-02
7506 2015-10-04
4 7503 2015-10-02

특정 날짜에 대한 주문을 추출하기 위해 쿼리를 실행하면 최적화 프로그램이 전체 테이블 스캔을 사용하도록 선택할 수 있으며 AMP 내의 모든 레코드에 액세스 할 수 있습니다. 이를 방지하기 위해 주문 날짜를 분할 된 기본 인덱스로 정의 할 수 있습니다. 주문 테이블에 행이 삽입되면 주문 날짜별로 분할됩니다. 각 파티션 내에서 행 해시로 정렬됩니다.

다음 데이터는 레코드가 Order Date로 분할 된 경우 AMP에 레코드가 저장되는 방식을 보여줍니다. Order Date별로 레코드에 액세스하기 위해 쿼리를 실행하면 해당 특정 주문에 대한 레코드가 포함 된 파티션 만 액세스됩니다.

AMP 1

분할 RowHash 주문 번호 OrderDate
0 7501 2015-10-01
1 1 7505 2015-10-03
1 2 7504 2015-10-03
2 4 7508 2015-10-05

AMP 2

분할 RowHash 주문 번호 OrderDate
0 2 7502 2015-10-02
0 4 7503 2015-10-02
1 7506 2015-10-04
2 1 7507 2015-10-05

다음은 파티션 primary Index가있는 테이블을 생성하는 예입니다. PARTITION BY 절은 파티션을 정의하는 데 사용됩니다.

CREATE SET TABLE Orders (
   StoreNo SMALLINT, 
   OrderNo INTEGER, 
   OrderDate DATE FORMAT 'YYYY-MM-DD', 
   OrderTotal INTEGER 
) 
PRIMARY INDEX(OrderNo) 
PARTITION BY RANGE_N  (
   OrderDate BETWEEN DATE '2010-01-01' AND '2016-12-31' EACH INTERVAL '1' DAY
);

위의 예에서 테이블은 OrderDate 열로 분할됩니다. 매일 하나의 별도 파티션이 있습니다.